【剑指offer】 面试题29. 顺时针打印矩阵
题目描述
面试题29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
分析
按照顺时针顺序分别是从左到右,上到下,右到左,下到上遍历一遍。然后在内侧再继续
因此可以设置四个标志位,一轮结束后标志位分别往里移动
解题
class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if not matrix: return [] l,r,t,b = 0,len(matrix[0])-1,0,len(matrix)-1 res = [] while True: for i in range(l,r+1): res.append(matrix[t][i]) t+=1 #顶落下来 if t>b:break for i in range(t,b+1): res.append(matrix[i][r]) r-=1 #最右往左移动 if r<l:break for i in range(r,l-1,-1): res.append(matrix[b][i]) b-=1 #低向上移 if t>b:break for i in range(b,t-1,-1): res.append(matrix[i][l]) l+=1 #最左往右 if r<l:break return res