Leetcode:59. 螺旋矩阵 II
编辑
14
2024-05-16
Leetcode题目链接:59. 螺旋矩阵 II
题目描述:
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
题目示例:
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
解题思路:
模拟矩阵
定义位置starx,starty用于记录每圈的左上角位置,每执行完一次循环向右下角移动一个位置([ 0, 0 ] -> [ 1, 1 ])
定义变量offset用于指定对当前生成外圈的四个边角位置的特殊处理
定义i,j变量作为循环元素,matrix[ i ][ j ]即为当前所在元素的位置,对其进行赋值
定义loop = n / 2 作为循环次数,定义mid = n / 2 作为该矩阵的中心位置(用于特殊处理中心位置元素)
第一个for循环从左到右的方向处理第 startx 行(不包括右上角顶点元素)
第二个for循环从上到下的方向处理最后第 n - offset 列(不包括右下角顶点元素)
第三个for循环从右到左的方向处理最后第 n - offset 行(不包括左下角顶点元素)
第四个for循环从下到上的方向处理第 starty 列(不包括左上角顶点元素)
完成四次for循环后startx,starty,offset都 + 1,往内圈移动以生成新的内圈元素
最后对矩阵进行特殊判断,若 n 为奇数,则对最中心元素进行赋值
我的答案:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n, 0));
int startx = 0,starty = 0,offset = 1;
int i = 0,j = 0,num = 1;
int loop = n / 2, mid = n / 2;
while(loop--){
i = startx;
j = starty;
for(j; j < n - offset; j++)
matrix[i][j] = num++;
for(i; i < n - offset; i++)
matrix[i][j] = num++;
for( ; j > starty; j--)
matrix[i][j] = num++;
for( ; i > startx; i--)
matrix[i][j] = num++;
startx++;
starty++;
offset++;
}
if(n % 2 == 1)matrix[mid][mid] = num;
return matrix;
}
};
提交结果:
- 0
- 0
-
赞助
AliPayWeChat Pay -
分享