给定一个二维数组 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
思路:容易想,但是要注意边界问题,还有下标的范围容易出错
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