Spiral Matrix II

http://blog.csdn.net/shiquxinkong

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 ]
]

我们按着要求去走一圈,就像剥橘子一样,我们把上下左右的皮都剥掉了,那么这圈就可以了,只不过这里拨了一层还的拨。好了,看图:

Spiral Matrix II_第1张图片

其中颜色一样的表示在同一层,红色表示每层的起始点,这个实例共有三层,按着前面说的,在拨的时候就按上右下左的顺序去拨,上有老下有小左右兄弟右有姐妹。

那么我需要拨几层呢?上面的三层是我们用眼睛盯出来了,对,应该是 (n + 1)/ 2.

//CODE

class Solution {
public:
   
    vector<vector<int> > generateMatrix(int n) {
        vector<vector<int> > vivec(n,vector<int>(n, 0));
        if(n <= 0) return vivec;
        int start_num = 1;
        //up,right,down and left construct a circle.
        int layer = 0;
        while(layer < (1+n)/2)
        {
         //up
        for(int i = layer; i < n - layer; ++i)
        {
            vivec[layer][i] = start_num++;
        }
        //right
        for(int i = layer + 1; i < n - layer; ++i)
        {
            vivec[i][n - layer - 1] = start_num++;
        }
        //down
        for(int i = n - layer - 2; i >= layer; --i)
        {
            vivec[n - layer - 1][i] = start_num++;
        }
        //left
        for(int i = n - layer - 2; i >= layer + 1; --i)
        {
            vivec[i][layer] = start_num++;
        }
         layer++;
        }
        return vivec;
    }
};
注意控制每一层的起始边界。

你可能感兴趣的:(LeetCode,Algorithm,实例,Matrix)