python | #螺旋矩阵#
螺旋矩阵
http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
# # # @param matrix int整型二维数组 # @return int整型一维数组 # class Solution: def spiralOrder(self , matrix ): # write code here if len(matrix)==0: return matrix m = 0 n = len(matrix)-1 #行数 a = 0 b = len(matrix[0])-1 #列数 result = [] #保存结果 #保证输入矩阵行列数量都大于等于2 if n ==0 and b==0: #一行一列 return matrix[0] elif n==0: #一行 return matrix[0] elif b==0: #一列 return [x[0] for x in matrix] while m<n and a < b: result.extend(self.circle(matrix, m, n, a, b)) a+=1 m+=1 n-=1 b-=1 if m==n and a==b:#中间只剩一个值的情况(奇数方阵) result.append(matrix[m][a]) return result elif m>n and a>b:#中间没有值(偶数方阵) pass elif m==n:#中间还剩一行 result.extend(matrix[m][a:b+1]) elif a==b:#中加还有一列 result.extend([x[a] for x in matrix[m:n+1]]) return result def circle(self,matrix,m,n,a,b): ''' 读取m,n行与a,b列交叉形成的矩形边的值 m<n,a<b ''' tem = [] tem.extend(matrix[m][a:b+1]) # 向右 for i in range(m+1,n): #向下 tem.append(matrix[i][b]) tem.extend(reversed(matrix[n][a:b+1])) #向左 for j in range(n-1,m,-1): #向上 tem.append(matrix[j][a]) return tem