题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili
主要就是要记住每条边一直是"左闭右开",然后循环圈数是n/2,用while来控制循环圈数,要记得设置每一圈的起始点为startx和starty,不能直接用i和j,因为起始点会随着圈数的变化而变化,然后用四个循环遍历四条边。然后如果n是奇数记得要把中间的元素补上。
代码:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector<int>(n, 0));
int startx=0;
int starty=0;
int i,j=0;
int offset=1;
int count=1;
int loop=n/2;
int mid=n/2;
while(loop--){
i=startx;
j=starty;
for(;j<n-offset;j++){
res[i][j]=count++;
}
for(;i<n-offset;i++){
res[i][j]=count++;
}
for(;j>starty;j--){
res[i][j]=count++;
}
for(;i>startx;i--){
res[i][j]=count++;
}
startx++;
starty++;
offset+=1;
}
if(n%2){
res[mid][mid]=count;
}
return res;
}
};
错误原因:不会设置二维数组;
offset没有加1;
奇数阶的矩阵补上count的时候不用count++;