54. Spiral Matrix

2017-12-04  本文已影响0人  飞飞廉

leetcode 54. 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].

思路:

将一个矩阵按照螺旋顺序打印出来,只能一条边一条边的打印,首先我们要从给定的mxn的矩阵中算出按螺旋顺序有几个环,注意最终间的环可以是一个数字,也可以是一行或者一列。环数的计算公式是 min(m, n) / 2,知道了环数,我们可以对每个环的边按顺序打印。
定义p,q为当前环的高度和宽度,当p或者q为1时,表示最后一个环只有一行或者一列,可以跳出循环。此题的难点在于下标的转换,如何正确的转换下标是解此题的关键,我们可以对照着上面的3x3的例子来完成下标的填写,代码如下:

var spiralOrder = function(matrix) {
    var res=[];
    if(matrix.length===0) return [];
    var m=matrix.length;
    var n=matrix[0].length;
    var c=m>n?Math.ceil(n/2):Math.ceil(m/2);
    var p=m,q=n;
    for(var i=0;i<c;++i,p-=2,q-=2){
        for(var col=i;col<i+q;++col){
            res.push(matrix[i][col]);
        }
        for(var row=i+1;row<i+p;++row){
            res.push(matrix[row][i+q-1]);
        }
        if(p===1 || q===1) break;
        for(var col=i+q-2;col>=i;--col){
            res.push(matrix[i+p-1][col]);
        }
        for(var row=i+p-2;row>i;--row){
            res.push(matrix[row][i])
        }
    }
    return res;
};
上一篇下一篇

猜你喜欢

热点阅读