山南市网站建设_网站建设公司_阿里云_seo优化
2025/12/30 1:14:37 网站建设 项目流程

代码随想录:螺旋矩阵II
题目链接:螺旋矩阵II

题目描述

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

点击查看代码
class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n,vector<int>(n,0));int startx = 0,starty = 0;int loop = n / 2;int mid = n / 2;int count = 1;int offset = 1;while(loop--){int i = startx;int j = starty;for(j;j < n-offset;j++) res[i][j] = count++;for(i;i < n-offset;i++) res[i][j] = count++;for(;j>starty;j--) res[i][j] = count++;for(;i>startx;i--) res[i][j] = count++;startx++;starty++;offset++;       }if(n%2==1) res[mid][mid] = count;return res;}
};
小结

本题运用模拟思想,通过模拟画一个正方形实现

解题思想:保持左闭右开,从外到内,依次从上行->右行->下行->左行,对正方形进行一圈填充

做法:

变量

int startx=0,starty=0; //起始位置;每循环一圈都加1
int loop=n/2; //循环圈数
int mid=n/2; //若n为奇数,则最中心会有一个空缺,用result[mid][mid]填充
int offset=1; //用于避免遍历到右上角和右下角,保持遍历的左闭右开不变
int count=1; //用于计数,每填充一个,count++
  • 通过loop确定循环圈数 while(loop--)
  • 进行每圈的模拟,注意每一段的遍历赋值条件
  • 每次遍历完一圈,更新下一次起始位置,startx++; starty++;并且更新补充值 offset++;
  • 将循环圈数进行完后,需要判断正方形中心是否有空缺,即n%2==1, n为奇数则有空缺,中心为result[mid][mid]=count;

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询