剑指offer刷到了这道题,网上又没有搜到答案,就自己写了一个
我使用的递归调用的思路
我把顺时针旋转一圈作为一个递归的轨迹
即matrix[0][0]matrix[0][i-1]matrix[i-1][i-1]matrix[1][0]
然后让原始matrix把matrix[0]和matrix[-1]使用pop方法弹出,剩下的每个一维列表的首个(matrix[i][0])和末尾元素(matrix[i][-1])弹出,获得新的matrix
然后判断边界条件即可
class Solution:
"""
@param matrix: a matrix of m x n elements
@return: an integer list
"""
def spiralOrder(self, matrix):
# write your code here
L = []
m = len(matrix)
if m == 0:
return []
n = len(matrix[0])
if n == 0:
return []
if m == 1 :
return matrix[0]
if n == 1 :
for i in range(0,m):
L.append(matrix[i][0])
return L
for i in range(0,n):
L.append(matrix[0][i])
for j in range(1,m):
L.append(matrix[j][n-1])
for i in range(1,n):
L.append(matrix[m-1][n-1-i])
for j in range(1,m-1):
L.append(matrix[m-1-j][0])
matrix.pop(0)
# return matrix
matrix.pop(-1)
# return matrix
for i in range(0,len(matrix)):
matrix[i].pop(0)
# return matrix
matrix[i].pop(-1)
# return matrix
L.extend(self.spiralOrder(matrix))
return L