59螺旋数组

按照边遍历的顺序进行赋值,可以将整个任务分为多个螺旋完成,每个螺旋按边打印。最外层螺旋起始分别是(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;
    }
};
posted @ 2024-10-12 12:08  名字好难想zzz  阅读(17)  评论(0)    收藏  举报