首页 > 其他 > 详细

Spiral Matrix II -- leetcode

时间:2015-03-28 17:15:57      阅读:208      评论:0      收藏:0      [点我收藏+]

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) {
        static int dir[][2]  = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
        vector<vector<int> > ans(n, vector<int>(n));
        int num = 1;
        int k = 0;
        int x = -1, y = 0;
        while (n) {
            if (k & 1)
                --n;
            
            for (int i=0; i<n; i++) {
                x += dir[k][0];
                y += dir[k][1];
                ans[y][x] = num++;
            }
            
            k = (k+1) & 3;
        }
        
        return ans;
    }
};


此算法在leetcode上实际执行时间为6ms。
基本思路:
类似于矩阵逐层剥皮的方法,从外到里。
1, 从左往右,填充n个元素,
2,从上往下,填充n-1个元素;
3,从右往左,填充n-1个元素;
4,从下往上,填充n-2个元素;
5,从左往右,填充n-2个元素   (从此步起,进入里面一层了)
...


方向由变量 k 控制。


本算法参考并作略改编自以下讨论:

Spiral Matrix II -- leetcode

原文:http://blog.csdn.net/elton_xiao/article/details/44702867

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!