·题目描述
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
·解题思路
1.螺旋 == 绕圈。所以就是绕圈遍历矩阵
2.遍历顺序:第一排的从左至右;最右列的从上至下;最低行的从右至左;最左边的从下至上
3.需要注意的是,第一排遍历完,top += 1;最右边,right -= 1;最下边 bottom -= 1;最左边 left += 1
·代码实现
class Solution(object):
def spiralOrder(self, matrix):
if matrix == []:
return []
result = []
top , bottom = 0, len(matrix) - 1
left , right = 0, len(matrix[0]) - 1
while top <= bottom and left <= right:
for i in range(left , right + 1):
result.append(matrix[top][i])
top += 1
for i in range(top, bottom + 1):
result.append(matrix[i][right])
right -= 1
for j in range(right, left -1, -1):
result.append(matrix[bottom][j])
bottom -= 1
for j in range(bottom, top -1 , -1):
result.append(matrix[j][left])
left += 1
return result