59.螺旋矩阵II
题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili
class Solution {
public:
vector> generateMatrix(int n) {
vector> matrix(n,vector(n));//这种matrix的写法不熟悉
int top=0;
int bottom=n-1;
int right=n-1;
int left=0;
int num=1;//num从1到n^2
while(left<=right && top<=bottom){//这里的循环调节我先乘了num<=num*num了,其实可以直接携程上下左右界
for(int i=left;i<=right;i++){
matrix[top][i]=num++;
}
for(int i=top+1;i<=bottom;i++){
matrix[i][right]=num++;
}
if(right>left && bottom>top){
for(int i=right-1;i>left;i--){
matrix[bottom][i]=num++;
}
for(int i=bottom;i>top;i--){
matrix[i][left]=num++;
}
}
left++;
right--;
top++;
bottom--;
}
return matrix;
}
};
2023/08/10 19:27 这一题乍一看还是没有思路的;
C老师给的思路:
1、初始化 n*n 的矩阵;
2、定义四个边界:right、bottom、left、top。它们分别代码我们可以填充的矩阵的四个边界;
3、使用一个变量 num,从1开始到n^2;
4、循环中,从左往右填充顶行、从上往下填充右列、从右往左填充底行、从下往上填充左列;
5、每填充完一个方向,更新相应的边界;
6、继续填充直到位置填满;
边界控制这一块还是不够熟悉 2023/08/10 20:22
vcetor
2023/08/10 20:29
卡哥实现的是四个边界分的很清楚的边界限定,另外,循环调节卡哥使用的是轮次;