// 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;
}
};
算法-矩阵-螺旋矩阵Ⅱ(按层模拟)
原创
©著作权归作者所有:来自51CTO博客作者一叶孤舟渡的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:《算法总结》——二叉树
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
模拟法螺旋遍历矩阵:54.螺旋矩阵(Kotlin)
54. 螺旋矩阵给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时
bmp gui unix xcode macbook -
螺旋矩阵【数组】
时间复杂度:空间复杂度:
矩阵 List 空间复杂度 时间复杂度 -
1050 螺旋矩阵
题目#include<iostream>#include<algorithm>#include<cmath>using na
1050 螺旋矩阵 ci #include i++