螺旋矩阵。给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
1 | |
示例 2:
1 | |
思路一
按照四个方向遍历,右、下、左、上。向右遍历之后增加 rowBegin,向下遍历之后减少 colEnd,向左遍历之后减少 rowEnd,向上遍历之后增加 colBegin。需要注意的是,当向左和向上遍历时,需要判断是否还有多的 row 和多的 col。时间复杂度 $O(N)$,空间复杂度 $O(1)$。
1 | |
思路二
相当于遍历一遍数组,我们可以先确定下一次需要移动的方向,然后在进行输出,令 seen[r][c] 表示已经遍历过得元素,当前的位置为 (r,c),下一次移动的方向为 di,则下一个位置候选是 (cr, cc),当碰到边界或者 seen[cr][cc] 为 True 时,则需要变换方向。时间复杂度 $O(N)$,空间复杂度 $O(N)$。
1 | |