给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
方法:设定上下左右边界
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//使用vector定义一个二维数组
vector<vector<int>> res(n, vector<int>(n, 0));
//定义上下左右所表示的行列,作为边界的控制因素
int top = 0;
int bottom = n - 1;
int left = 0;
int right = n - 1;
int num = 1; //放的第一个元素
int tar = n * n; //放的最后一个元素
//此循环用来保证所有的元素都被放入到矩阵中
//放置元素的顺序要遵循螺旋的规律,顺时针顺序
while(num <= tar) {
//数组上侧从左到右填充
//行不变,列变,具体是哪行,根据top(上侧)位置决定
for(int i = left; i <= right; ++i) {
res[top][i] = num++;
}
++top; //填充完,数组上侧已满一行,top+1
//数组右侧从上到下填充
//行变,列不变,具体是哪列,根据right(右侧)位置决定
for(int i = top; i <= bottom; ++i) {
res[i][right] = num++;
}
--right; //填充完,数组右侧已满一列
//数组下侧从右到左填充
//行不变,列变,具体是哪行,根据bottom(下侧)位置决定
for(int i = right; i >= left; --i) {
res[bottom][i] = num++;
}
--bottom; //填充完,数组下侧已满一行
//数组左侧从下到上填充
//行变,列不变,具体是哪列,根据left(左侧)位置决定
for(int i = bottom; i >= top; --i) {
res[i][left] = num++;
}
++left; //填充完,数组左侧已满一列
}
return res;
}
//时间复杂度:O(n^2),其中 n 是给定的正整数。矩阵的大小是 n×n,需要填入矩阵中的每个元素。
//空间复杂度:O(1)。除了返回的矩阵以外,空间复杂度是常数
};
题解:
字丑莫怪,有不明白的点欢迎留言~~~~~~