【LeetCode从零单刷】Spiral Matrix II

来源:互联网 发布:在线打电话软件 编辑:程序博客网 时间:2024/06/07 23:50

题目:

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]

解答:

重要的是找到循环的规律:每层环都可以由四个部分组成,第一个环每部分长为(n-1),第二个环每部分长为(n-3)…(n-2k)… 如下图所示:


对于奇数与偶数不同的地方在于:奇数螺旋矩阵的最中间仅有一个部分组成,取值为 n;偶数螺旋矩阵的最中间仍然是四个部分。

class Solution {public:    vector<vector<int>> generateMatrix(int n) {        vector<int> row(n, 0);        vector<vector<int>> ans(n, row);        if(n <= 0)  return ans;                int x = 0, y = 0;        int num = 0;        int a, b, c, d;        for(int i=n-1; i>=0; i=i-2)        {            if(i == 0)  ans[x][y] = n*n;            else            {                for(a = 0; a < i; a++)                {                    ans[x][y+a] = ++num;                }                y = y + i;                                for(b = 0; b < i; b++)                {                    ans[x+b][y] = ++num;                }                x = x + i;                                for(c = 0; c < i; c++)                {                    ans[x][y-c] = ++num;                }                y = y - i;                                for(d = 0; d < i; d++)                {                    ans[x-d][y] = ++num;                }                x = x - i + 1;                y = y + 1;            }        }        return ans;    }};


0 0