54. Spiral Matrix

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=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;
};

你可能感兴趣的:(54. Spiral Matrix)