题目链接:59.螺旋矩阵II
卡哥的视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II
解题思路:定义一个新的n*n二维数组,用for循环遍历把数字依次遍历进去,如果n为基数,则手动把最后一个元素输入到二维数组的最中心。
代码示例:
代码运行逻辑:
这段代码实现了一个函数 generateMatrix
,用于生成一个大小为 n
× n
的螺旋矩阵。
具体的运行流程如下:
-
初始化变量
loop
为 0,用于控制循环次数。初始化一个二维数组res
作为结果矩阵,所有元素初始值为 0。初始化变量start
为 0,用于记录每次循环的起始点。初始化变量count
为 1,用于填充矩阵的数字。定义两个变量i
和j
用于遍历矩阵。 -
进入循环,条件是
loop++ < n / 2
,表示从外向内遍历螺旋矩阵。在每次循环开始前,loop
自增 1。 -
在循环内部,分别模拟了四个方向的遍历过程:
- 从左到右:在当前循环中,从
res[start][start]
开始,向右遍历到res[start][n - loop - 1]
,依次填入数字count++
。 - 从上到下:从
res[start][n - loop - 1]
开始,向下遍历到res[n - loop - 1][n - loop - 1]
,依次填入数字count++
。 - 从右到左:从
res[n - loop - 1][n - loop - 1]
开始,向左遍历到res[n - loop - 1][start]
,依次填入数字count++
。 - 从下到上:从
res[n - loop - 1][start]
开始,向上遍历到res[start + 1][start]
,依次填入数字count++
。
- 从左到右:在当前循环中,从
-
每次循环结束后,
start
自增 1。 -
如果
n
为奇数,最后一个循环结束后需要将中心位置的值填入count
。 -
返回生成的螺旋矩阵
res
。
这样,通过模拟四个方向的遍历过程,逐步填充数字,最终得到了一个按顺时针螺旋排列的矩阵。
总结:注意for循环时是否包含等号,避免重复