美文网首页
54. Spiral Matrix

54. Spiral Matrix

作者: 飞飞廉 | 来源:发表于2017-12-04 15:18 被阅读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;
    };
    

    相关文章

      网友评论

          本文标题: 54. Spiral Matrix

          本文链接:https://www.haomeiwen.com/subject/qddxixtx.html