Spiral Matrix螺旋遍历矩阵

假定有:

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

这样一个数组矩阵,现要求对其进行顺时针方向螺旋形从外至内地遍历,即输出: [1,2,3,6,9,8,7,4,5]

分析:

将每一次360度遍历视为一个周期,每一个周期分为上右下左四个阶段,逐个进行遍历:

以下是本人的草稿,请忽略苍劲如龙卷风摧朽拉枯般的字体。。。

理清思绪后就剩下笔了:

var spiralOrder = function(matrix) {
    var x1= 0, y1= 0, x2= matrix[0].length- 1, y2= matrix.length- 1;
    var result= []
    while(x1<=x2 && y1<=y2){                                    
        for(var y= y1; y<= y2; y ++){
            result.push(matrix[x1][y])
        }
        for(var x= x1+ 1; x<= x2; x ++){
            result.push(matrix[x][y2])
        }
        for(var y= y2-1; y>= y1; y --){
            result.push(matrix[x2][y])
        }
        for(var x= x2-1; x>= x1+1; x --){
            result.push(matrix[x][y1])
        }
        ++x1
        ++y1
        --x2
        --y2
    }
    console.log(result)
    return result
};
spiralOrder([
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
])
原文地址:https://www.cnblogs.com/yanze/p/7606510.html