力扣第59题:螺旋矩阵 II
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 res。
示例: 输入 3
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<vector <int>> res (n,vector<int>(n,0));
int mid = n / 2;
int loop = n / 2;
int offset = 1;
int count = 1;
int i,j;
int startX = 0;
int startY = 0;
while(loop--){
i = startX;
j = startY;
//for循环中循环的边界都是左闭右开
//上行从左到右
for (j = startY; j < startY + n - offset; ++j) {
res[startX][j] = count++;
}
//右列从上到下
for (i = startX; i < startX + 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自增2
offset += 2;
}
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) {
cout << res[i][j] << " ";
}
cout << endl;
}
if(n % 2){
res[mid][mid] = count;
}
return 0;
}
对于这个题,可以直接将上述矩阵转置输出,也可以重新进行模拟
重新模拟的代码在这里不在展示,转置只需把输出代码替换为
//数组输出
for (i = 0; i < n; ++i) {
for (j = n - 1; j >= 0;j--) {
cout << res[j][i] << " ";
}
cout << endl;
}
后续更多内容,请订阅:派大星的好朋友