算法-矩阵-螺旋矩阵Ⅱ(按层模拟)_i++

// class Solution {
// public:
// vector<vector<int>> generateMatrix(int n) {
// queue<int> que;
// for(int i = 1; i <= n * n; i++){
// que.push(i);
// }
// //新建返回数组
// vector<vector<int>> ans(n, vector<int>(n));
// //新建边界
// int rows = n, columns = n;
// int left = 0, right = n - 1, top = 0, bottom = n - 1;
// //循环
// while(left <= right && top <= bottom){
// for(int column = left; column <= right; column++){
// ans[top][column] = que.front();
// que.pop();
// }
// for(int row = top + 1; row <= bottom; row++){
// ans[row][right] = que.front();
// que.pop();
// }
// if(left < right && top < bottom){
// for(int column = right - 1; column > left; column--){
// ans[bottom][column] = que.front();
// que.pop();
// }
// for(int row = bottom; row > top; row--){
// ans[row][left] = que.front();
// que.pop();
// }
// }
// left++;
// top++;
// right--;
// bottom--;
// }
// return ans;
// }
// };

class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int maxNum = n * n;
int curNum = 1;
vector<vector<int>> matrix(n, vector<int>(n));
int row = 0, column = 0;
vector<vector<int>> directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 右下左上
int directionIndex = 0;
while (curNum <= maxNum) {
matrix[row][column] = curNum;
curNum++;
int nextRow = row + directions[directionIndex][0], nextColumn = column + directions[directionIndex][1];
if (nextRow < 0 || nextRow >= n || nextColumn < 0 || nextColumn >= n || matrix[nextRow][nextColumn] != 0) {
directionIndex = (directionIndex + 1) % 4; // 顺时针旋转至下一个方向
}
row = row + directions[directionIndex][0];
column = column + directions[directionIndex][1];
}
return matrix;
}
};