【剑指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

 

posted @ 2020-05-22 21:36  Flora1014444  阅读(127)  评论(0编辑  收藏  举报