【数组】Spiral Matrix

题目:

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]

You should return [1,2,3,6,9,8,7,4,5].

思路:

逐个环的打印, 对于m *n的矩阵,环的个数是 Math.ceil((Math.min(m,n))/2)。对于每个环顺时针打印四条边。

注意的是:最后一个环可能只包含一行或者一列数据

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
    if(matrix.length==0||matrix==null){
        return [];
    }
    var m=matrix.length,n=matrix[0].length;
    var circle=Math.ceil((Math.min(m,n))/2);
    
    var a=m,b=n,res=[];
    for(var i=0;i<circle;i++,a-=2,b-=2){
        for(var col=i;col<i+b;col++){
            res.push(matrix[i][col]);
        }
        for(var row=i+1;row<i+a;row++){
            res.push(matrix[row][i+b-1]);
        }
        if(a==1||b==1)break;
        for(var col=i+b-2;col>=i;col--){
            res.push(matrix[i+a-1][col]);
        }
        for(var row=i+a-2;row>i;row--){
            res.push(matrix[row][i]);
        }
        
    }
    
    return res;
    
};

 

posted @ 2016-01-05 22:29  很好玩  阅读(219)  评论(0编辑  收藏  举报