螺旋遍历二维数组【leetcode】

给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。

螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。

示例 1:

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

输入:array  = [[1,2,3,4],[12,13,14,5],[11,16,15,6],[10,9,8,7]]
输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
 

限制:

0 <= array.length <= 100
0 <= array[i].length <= 100

思路:容易想,但是要注意边界问题,还有下标的范围容易出错螺旋遍历二维数组【leetcode】_第1张图片

螺旋遍历二维数组【leetcode】_第2张图片

class Solution(object):
    def spiralArray(self, array):
        """
        :type array: List[List[int]]
        :rtype: List[int]
        """
        if not array: return []
        l,r,u,d,t=0,len(array[0])-1,0,len(array)-1,[]
        while True:
            #从左到右
            for i in range(l,r+1):
                t.append(array[u][i])
            u+=1
            if u>d: break
            #从上到下
            for j in range(u,d+1):
                t.append(array[j][r])
            r-=1
            if l>r: break
            #从右到左
            for i in range(r,l-1,-1):
                t.append(array[d][i])
            d-=1
            if u>d: break
            #从下到上
            for j in range(d,u-1,-1):
                t.append(array[j][l])
            l+=1
            if l>r: break
        return t

你可能感兴趣的:(leetcode,算法)