这一题的思路是递归,先顺序打印第一行,最后一列。最后一行(倒序),第一列(倒序),打印的过程注意去除重复元素,此时 如果矩阵不为空,可以重复这个过程。如果矩阵为空,就要返回上一级。代码如下:
class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
if len(matrix) == 0:
return []
if len(matrix) == 1:
return matrix[0]
if len(matrix) == 2:
return matrix[0] + matrix[1][::-1]
res = []
self.dp(matrix, res)
return res
def dp(self, matrix, res):
if len(matrix) == 0:
return
if len(matrix[0]) == 0:
return
if len(matrix) == 1:
res += matrix[0]
return
if len(matrix) == 2:
res += matrix[0]
res += matrix[1][::-1]
return
if len(matrix[0]) == 1:
for j in range(len(matrix)):
res.append(matrix[j][0])
return
for i in range(len(matrix[0]) - 1):
res.append(matrix[0][i])
for j in range(len(matrix) - 1):
res.append(matrix[j][-1])
for i in range(len(matrix[-1])-1,0,-1):
res.append(matrix[-1][i])
for j in range(len(matrix)-1,0,-1):
res.append(matrix[j][0])
matrix = matrix[1:len(matrix)-1]
for i in range(len(matrix)):
matrix[i] = matrix[i][1:len(matrix[i])-1]
if len(matrix) != 0:
self.dp(matrix, res)
return