假定有:
[ [ 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 ] ])