leetcode 螺旋矩阵 二维数组

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

示例 2:

输入:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

原题来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix

思路
判断出路线都是有固定方向的 先→再↓再←再↑再→…一直循环到没有数字。
有4个方向边界 当触及边界时即按固定方向转向,且其对应的边界值向内收缩1
若没触及边界,就按自身方向继续行走,直到坐标值触边界/数字全部遍历过。

var spiralOrder = function(matrix) {
            var res=[]
            var i=0
            var j=0
            var n=matrix.length-1
            if(n<0)
                return []
            var m = matrix[0].length-1
            var turn = m==0?'d':'r' //1行n列数组
            var boundl = 0
            var boundr = m
            var boundu = 0
            var boundd = n

            for(var a=0;a<(m+1)*(n+1);a++){
                res.push(matrix[i][j]);
                if(turn=='r'){
                j++
                if(j==boundr){
                    boundu++ //相当于对应边界缩1
                    turn='d'
                }
                }else if(turn=='d'){
                i++
                if(i==boundd){
                    boundr--
                    turn='l'
                }
                }else if(turn=='l'){
                j--
                if(j==boundl){
                    boundd--
                    turn='u'
                }
                }else if(turn=='u'){
                i--
                if(i==boundu){
                    boundl++
                    turn='r'
                }
                }
            }
            return res
        };

猜你喜欢

转载自blog.csdn.net/xiaojuziliu/article/details/106119976