本文最后更新于635 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
文章讲解:https://programmercarl.com/0059.%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5II.html
视频讲解:https://www.bilibili.com/video/BV1SL4y1N7mV/
1.第一次看这个的时候根本看不懂题目,在之前自己刷力扣的时候做过这个题所以还是有点印象的,就是有记得是4个for循环来输入一圈。
2.看了代码随想录之后想通了我只需要完成好一圈的数据填充即可,其他的通过控制每一圈的参数的变化即可控制好一圈一圈的进入这个矩阵,还有就是没考虑到有单数X单数的矩阵,导致少了一个条件判断语句。
3.自己按照上面的思路做了一遍,过了3组数据,属于死耗子了,检查了一遍发现每进入一圈的下一圈的时候没有变更参数,就每一圈的最后位置没有进行更改。总的来说感觉有点算法思路了。
这是第一次的代码放上来给以后自己看看吧
CPP
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int indexh = 0;
int indexv = 0;
int gap = n/2;
int i;
int j;
int cnt = 1;
vector<vector<int>> matrix(n,vector<int>(n,0));
while(gap --){
for(j = 0; j<n-1;j++){
matrix[indexh][j] = cnt;
cnt++;
}
for(i = 0;i<n-1;i++){
matrix[i][j] = cnt;
cnt++;
}
for(;j>indexv;j--){
matrix[i][j] = cnt;
cnt++;
}
for(;i>indexh;i--){
matrix[i][j] = cnt;
cnt++;
}
indexh++;
indexv++;
}
if(n%2 == 1){
matrix[indexh][indexv] = cnt;
}
return matrix;
}
};
这是改之后的代码,参考了代码随想录。。。
CPP
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int indexh = 0;
int indexv = 0;
int gap = n/2;
int i;
int j;
int cnt = 1;
int count = 1;
vector<vector<int>> matrix(n,vector<int>(n,0));
while(gap --){
i = indexh;
j = indexv;
for(j; j<n-count;j++){
matrix[indexh][j] = cnt;
cnt++;
}
for(i;i<n-count;i++){
matrix[i][j] = cnt;
cnt++;
}
for(;j>indexv;j--){
matrix[i][j] = cnt;
cnt++;
}
for(;i>indexh;i--){
matrix[i][j] = cnt;
cnt++;
}
indexh++;
indexv++;
count++;
}
if(n%2 == 1){
matrix[indexh][indexv] = cnt;
}
return matrix;
}
};