leetcode[59]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:
void generate1(int icount, vector<vector<int>> &res, int left, int right, int up, int down)
{
/*
    if (icount==res.size()*res[0].size())
        return;
*/
    if (left>right||up>down)
        return;
    if (up==down)
    {
        for (int j=left;j<=right;j++)
        {
            icount++;
            res[up][j]=icount;
        }
        return;
    }
    if (left==right)
    {
        for (int i=up;i<=down;i++)
        {
            icount++;
            res[i][left]=icount;
        }
        return;
    }
    for (int j=left;j<right;j++)
    {
        icount++;
        res[up][j]=icount;
    }
    for (int i=up;i<down;i++)
    {
        icount++;
        res[i][right]=icount;
    }
    for (int j=right;j>left;j--)
    {
        icount++;
        res[down][j]=icount;
    }
    for(int i=down;i>up;i--)
    {
        icount++;
        res[i][left]=icount;
    }
    generate1(icount, res, left+1, right-1, up+1, down-1);
}
vector<vector<int> > generateMatrix(int n) 
{    
    vector<vector<int>> res;
    if(n==0)return res;
    vector<int> temp;
    temp.insert(temp.end(),n,INT_MIN);
    res.insert(res.end(),n,temp);
    generate1(0,res,0,n-1,0,n-1);
    return res;
}
};

 

posted @ 2015-02-09 14:36  Vae永Silence  阅读(118)  评论(0编辑  收藏  举报