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 ```

2022-12-13 17:56

2022-12-14 16:03

2022-12-17 02:23

2022-12-15 20:08

2022-12-19 17:47

2022-12-09 14:50

02-03 16:32