按照边遍历的顺序进行赋值,可以将整个任务分为多个螺旋完成,每个螺旋按边打印。最外层螺旋起始分别是(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-ki++;while (i <= n - 1 - k) {result[i][j] = count;count++;i++;}i--;//i=n-1-kj--;while (j >= k) {result[i][j] = count;count++;j--;}j++;//j = ki--;k++;//边长减1while (i >= k) {result[i][j] = count;count++;i--;}//更新下一螺旋的起点i = k;j = k;}return result;}
};