输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
自我解答
自外向内螺旋遍历,很简单,直接模拟过程就行了。
1、如果设置i,j 变量,大脑中模拟过程会发现,这是 i 和 j 交替变化的过程,
所以,应该是在一个循环内,分别进行两个循环的过程。
2、另外,还会发现,i 和 j 的变化规律是 增增,减减,增增,减减,增增,减减…
所以设置变量进行交替切换
3、还有,i 和 j 的变化的上下左右边界点,是变化的,所以,也需要设置变量
提交后,一遍过了。我的逻辑思维能力真的提高了。
小小心得:大脑模拟过程,从宏到微,先把握整体寻找规律很重要
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix:
return matrix
i = j = 0
min_i, max_i, min_j, max_j = -1, len(matrix), -1, len(matrix[0])
op, res = 1, []
while min_i < i < max_i and min_j < j < max_j:
while min_j < j < max_j:
res.append(matrix[i][j])
j += op
j -= op
i += op
while min_i < i < max_i:
res.append(matrix[i][j])
i += op
i -= op
j -= op
if op == 1:
max_j -= 1
min_i += 1
else:
min_j += 1
max_i -= 1
op = -op
return res