1. 题目
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
2. 示例
输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
3. 题解
此题很简单,确认每一圈的边界即可。
定义四个边界,top,down, left, right。
然后根据四个边界查找即可。
4. Code实现
1 class Solution:
2 def spiralOrder(self, matrix):
3 if not matrix:
4 return []
5 res = []
6 m, n = len(matrix), len(matrix[0])
7 top, down, left, right = 0, m, 0, n
8 while True:
9 # top行
10 for i in range(left, right):
11 res.append(matrix[top][i])
12 top += 1
13 if top >= down:
14 break
15 # right列
16 for i in range(top, down):
17 # right - 1:右边界是从n开始的
18 res.append(matrix[i][right - 1])
19 right -= 1
20 if right <= left:
21 break
22 # down行
23 # right - 1: right列的时候右下角的值已经被取了,因此需要right - 1
24 for i in range(right - 1, left - 1, -1):
25 # down - 1: 因为最后一行取的m
26 res.append(matrix[down - 1][i])
27 # left行
28 down -= 1
29 if down <= top:
30 break
31 # down - 1: down行时左下角值被取了,因此需要down - 1
32 for i in range(down - 1, top - 1, -1):
33 res.append(matrix[i][left])
34 left += 1
35 if left >= right:
36 break
37 return res
5. 结语
努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!
如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。