此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

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 ]
])

 

posted @ 2017-09-28 14:20  炎泽  阅读(794)  评论(0编辑  收藏  举报