螺旋矩阵。给定一个包含 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 |
|