leetcode-59-螺旋矩阵 II

题目描述:

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3
输出:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

 

要完成的函数:

vector<vector<int>> generateMatrix(int n) 

 

说明:

1、这道题给定一个整数n,要求生成一个n行n列的正方形矩阵,并且矩阵按顺时针螺旋顺序存放从1到n^2的所有元素。

2、这道题不难,我们前面做的螺旋矩阵1的代码完全可以拿过来改一改,就可以完成本道题目。

我们仍然把矩阵分成一层一层的,按层次填入元素。

代码如下:(附详解)

    vector<vector<int>> generateMatrix(int n) 
    {
        int k=0,count=1;//count表示我们要填入的数
        vector<vector<int>>res(n,vector<int>(n,0));//最终要返回的二维vector
        while(k<=(n-1)/2)//k表示当前处于哪一层
        {
            for(int i=k;i<=n-1-k;i++)//当前层次中最上面的那条边
            {
                res[k][i]=count;
                count++;
            }
            for(int i=k+1;i<=n-1-k;i++)//当前层次中最右边的那条边
            {
                res[i][n-1-k]=count;
                count++;
            }
            for(int i=n-2-k;i>=k;i--)//当前层次中最下面的那条边
            {
                res[n-1-k][i]=count;
                count++;
            }
            for(int i=n-2-k;i>=k+1;i--)//当前层次中最左边的那条边
            {
                res[i][k]=count;
                count++;
            }
            k++;//k+1,准备进入下一个层次
        }
        return res;//最终返回res     
    }

上述代码实测4ms,beats 99.74% of cpp submissions。

posted @ 2018-08-15 21:31  chenjx85  阅读(351)  评论(0编辑  收藏  举报