首页 » 编程之美 » 正文

[leetcode_59]Spiral Matrix II

输出螺旋增长的矩阵,两次AC注意n=0的情况

class Solution {
public:
    vector<vector<int> > generateMatrix(int n) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
        vector<vector<int>> ans(n);
        if(n == 0)
        {
            ans.clear();
            return ans;
        }
        int **map = new int <em>[n];
        for(int i = 0;i &lt; n;i++)
        {
            map[i] = new int[n];
        }<br />
        int val = 1;
        int x = 0;
        int y = 0;
        int dir = 1;//1右 2下 3左 4上
        int r1 = -1;
        int r2 = n;
        int l1 = -1;
        int l2 = n;
        while(true)
        {
            map[x][y] = val;
            switch(dir)
            {
                case 1:
                    y++;
                    if(y == l2)
                    {
                        dir = 2;
                        y--;
                        x++;
                        r1++;
                    }
                    break;
                case 2:
                    x++;
                    if(x == r2)
                    {
                        dir = 3;
                        x--;
                        y--;
                        l2--;
                    }
                    break;
                case 3:
                    y--;
                    if(y == l1)
                    {
                        dir = 4;
                        y++;
                        x--;
                        r2--;
                    }
                    break;
                case 4:
                    x--;
                    if(x == r1)
                    {
                        dir = 1;
                        x++;
                        y++;
                        l1++;
                    }
                    break;
            }
            if(val == n</em>n)
                break;
            val++;
        }
        for(int i = 0 ;i &lt; n;i++)
        {
            vector&lt;int&gt; tmp(n);
            for(int j = 0;j &lt; n;j++)
            {
                tmp[j] = map[i][j];
            }
            ans[i] = tmp;
        }
        return ans;
    }
};

发表评论