1. 题目
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
2. 答案
直接利用递归的思想,考虑所有的边界条件,再考虑一次调用的case
边界条件:无论是行还是列,只有有一个为1或者2这一圈就可以把这个矩阵遍历完
一次调用的case:考虑矩阵的四条边界
具体的看代码:
from typing import List
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
tmp_res = []
# 顺时针,先第一行
i = 0
for j in range(len(matrix[0])):
tmp_res.append(matrix[i][j])
# 最后一列
j = len(matrix[0])-1
for i in range(1, len(matrix)):
tmp_res.append(matrix[i][j])
# 最后一行
if len(matrix)-1 != 0:
i = len(matrix)-1
for j in range(len(matrix[0])-2, -1, -1):
tmp_res.append(matrix[i][j])
# 第一列
if len(matrix[0])-1 != 0:
j = 0
for i in range(len(matrix)-2, 0, -1):
tmp_res.append(matrix[i][j])
# 终止条件
if len(matrix) == 1 or len(matrix) == 2 or len(matrix[0]) == 1 or len(matrix[0]) == 2:
return tmp_res
else:
tmp_mat = matrix[1:-1]
new_new_mat = []
for i in tmp_mat:
new_new_mat.append(i[1:-1])
return tmp_res + self.spiralOrder(new_new_mat)
sol = Solution()
a_array = [[1,2,3],[4,5,6],[7,8,9]]
print(sol.spiralOrder(a_array))