Skip to main content

螺旋矩阵II59

地址:https://leetcode.cn/problems/queue-reconstruction-by-height/?envType=problem-list-v2&envId=segment-tree

题干

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

提示:

1 <= n <= 20

思路

我以前打ACM队预选赛的时候特别害怕这种题,开区间控制不好左开右闭的,我很害怕因为老是拿不准设置标准。

其实它是一个模拟的过程。

题解

class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
// 模拟矩阵的螺旋,左闭右开循环
vector<vector<int>> matrix(n,vector<int>(n,0));
int start_xVal = 0;
int start_yVal = 0;
int loop = n/2;// n*n,取一个方向研究,如果N是偶数,那么需要循环的条数是n/2,如果是奇数,也是n/2(除了中间的那个点要处理)
int middle = n/2;
int count = 1;
int offset = 1;
int i,j;
while(loop--){
i = start_xVal;
j = start_yVal;

for(j;j<n-offset;++j){
matrix[i][j]=count++;
}

for(j;i<n-offset;++i){
matrix[i][j]=count++;
}
for(;j>start_yVal;--j){
matrix[i][j]=count++;
}
for(;i>start_xVal;--i){
matrix[i][j]=count++;
}
start_xVal++;
start_yVal++;
offset++;
}
if((n%2)!=0){
matrix[middle][middle]=count++;
}

return matrix;
}

};

本文字数:0

预计阅读时间:0 分钟


统计信息加载中...

有问题?请向我提出issue