今天练习:螺旋矩阵II
需要在注意4个for循环的条件及内容;
需要注意\t是制表位,记住\\\\\\\\
#include<iostream>
#include<vector>
using namespace std;
class Soluation {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector<int>(n, 0)); // 定义一个元素全为0的 n*n大小的二维数组。
int startx = 0, starty = 0; // 每循环一个圈的位置
int loop = n / 2; // 需要转的完整的圈数,比如3*3转1圈,5*5转两圈
int mid = n / 2; //矩阵中间的位置
int count = 1; // 给结果矩阵赋值
int offset = 1; // 用于控制每一条边遍历的长度,
int i,j;
while (loop--)
{
i = startx;
j = starty;
for ( j = starty; j < n-offset; j++)
{
res[startx][j] = count++;
}
for ( i = startx; i < n-offset; i++)
{
res[i][j] = count++;
}
for ( j = n-offset; j >starty; j--)
{
res[i][j] = count++;
}
for ( i = n-offset; i >startx; i--)
{
res[i][j] = count++;
}
startx += 1;
starty += 1;
offset += 1;
}
// 如果n为奇数,需要单独给矩阵中间的的位置赋值
if (n % 2) {
res[mid][mid] = count;
}
return res;
}
};
int main() {
Soluation a;
int n = 0;
cout << "请输入数组长度n:" << endl;
cin >> n;
vector<vector<int>> ans;
ans = a.generateMatrix(n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << ans[i][j] << "\t";
}
cout << endl;
}
return 0;
}