#
#
# @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