按照边遍历的顺序进行赋值,可以将整个任务分为多个螺旋完成,每个螺旋按边打印。最外层螺旋起始分别是(0,0)->(0,n-1)->(n-1.n-1)->(n-1,0)->(1,0),螺旋的最后一条边会比前三条短1,同时每次更新打印螺旋需要注意螺旋的边会减少1,因此在每层螺旋的最后一条边打印前更新长度即可。最后注意下根据n来设置螺旋层数。
题目不难,但是有很多细节需要注意,比如每层边跳出时参数的变化,
代码如下:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> result(n, vector<int>(n, 0));
int count = 1;
int i = 0;
int j = 0;
int k = 0;
int loop = ceil(n / 2.0);
while ( loop-- ) {
while (j <= n - 1 - k) {
result[i][j] = count;
count++;
j++;
}//跳出循环时j=n-k;
j--;//j=n-1-k
i++;
while (i <= n - 1 - k) {
result[i][j] = count;
count++;
i++;
}
i--;//i=n-1-k
j--;
while (j >= k) {
result[i][j] = count;
count++;
j--;
}
j++;//j = k
i--;
k++;//边长减1
while (i >= k) {
result[i][j] = count;
count++;
i--;
}
//更新下一螺旋的起点
i = k;
j = k;
}
return result;
}
};
标签:count,59,螺旋,int,++,--,result,数组
From: https://www.cnblogs.com/gqzz/p/18460260