Spiral Matrix II

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

class Solution {
public:
    vector<vector<int> > generateMatrix(int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<int> > result;
        if (n <= 0) {
            return result;
        }
        result.resize(n);
        int i , x, begin;
        for (i = 0; i < n; ++i) {
            result[i].resize(n);
        }
        for (begin =  x = 0;;--n, ++begin) {
            for (i = begin; i < n; ++i) {
                result[begin][i] = ++x;
            }
            for (i = begin + 1;i < n; ++i) {
                result[i][n - 1] = ++x;
            }
            if (n  <= begin) {
                break;
            }
            for (i = n - 2; i >= begin; --i) {
                result[n - 1][i] = ++x;
            }
            for (i = n - 2; i > begin; --i) {
                result[i][begin] = ++x;
            }
        }
        return result;   
    }
};

 

posted @ 2013-09-03 23:12  一只会思考的猪  阅读(163)  评论(0编辑  收藏  举报