题目
思路
这段代码的思路是通过模拟螺旋填充的方式,将从 1 到 n x n 的数字依次填入一个 n x n 的矩阵中。具体来说,使用四个边界变量(top, bottom, left, right)来控制填充的范围,按照从左到右、从上到下、从右到左、从下到上的顺序逐层填充矩阵,每完成一层后收缩边界,直到所有数字都被填入矩阵为止。
这个题目其实与之前的螺旋矩阵非常相似,之前是从已有的数据中读取数据,这个是你自己往矩阵里面加入数据。
原理大致相似。我们先创建一个m:n*n的矩阵,将里面的数据全部初始化为0。
接着顺时针访问矩阵,将k不断地附加到矩阵中的相应位置即可。
代码
class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> m(n,vector<int>(n));int top=0,left=0,right=n-1,bottom=n-1;int k=1;while(left <= right && top <= bottom){for(int column=left;column<=right;column++){m[top][column] = k++;}for(int row=top+1;row<=bottom;row++){m[row][right] = k++;}if(left < right && top < bottom){for(int column=right-1;column>=left;column--){m[bottom][column] = k++;}for(int row=bottom-1;row>top;row--){m[row][left] = k++;}}left++;right--;bottom--;top++;}return m;}
};