题目描述
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
解题思路
- 没有具体的算法,考察的是模拟实现过程
- 一圈一圈的循环赋值(当n是奇数的时候,会少一圈,但是中间会有一个空值)
- 坚持循环不变量原则,循环条件:左闭右开(对应的循环条件总是<或者>,没有=)
代码实现
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//定义一个二维数组
vector<vector<int>> res(n, vector<int>(n, 0));
int startx = 0;
int starty = 0;
int loop = (n / 2); //要循环几圈
int mid = (n / 2); //中间的位置
int offset = 1; //数组下标从0开始,用于控制每次循环一条边的长度
int count = 1; //用于生成1-n的数字
int i,j; //必须全局定义,不然后面有些for里不能使用
//大圈的循环
//n是偶数,循环n/2圈
//n是奇数,循环n/2圈,还留有中间的空
while(loop--){
j = starty;
i = startx;
//第一圈 第一行 左闭右开,第一行最后一个元素不赋值
for(j = starty; j < n - offset; j++){
res[startx][j] = count++; //先是 = count 后是count+1
}
//第一圈 第n列
for( i = startx; i < n - offset; i++){
res[i][j] = count++;
}
//第一圈 第n行
for(; j > starty; j--){
res[i][j] = count++;
}
//第一圈 第一列
for(; i > startx; i--){
res[i][j] = count++;
}
offset += 1;
startx ++;
starty ++;
}
//如果n是奇数,还剩下中间位置
if(n%2){
res[mid][mid] = count;
}
return res;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】