面試題29. 順時針打印矩陣

題目

輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字。

 

示例 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]
 

限制:

0 <= matrix.length <= 100
0 <= matrix[i].length <= 100

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

思路

題意是按照從左到右,從上到下,從右到左,從下到上的順序進行,所以設變量l,r,t,b爲左右上下;

從左到右,則t+1,從上到下,則r-1,從右到左,則b-1,從下到上,則l+1;

停止條件,l>r,t>b

代碼

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if not matrix:return []
        l,r,t,b,out=0,len(matrix[0])-1,0,len(matrix)-1,[]
        while 1:
            for i in range(l,r+1):
                out.append(matrix[t][i])
            t+=1
            if t>b:
                break
            for i in range(t,b+1):
                out.append(matrix[i][r])
            r-=1
            if l>r:
                break
            for i in range(r,l-1,-1):
                out.append(matrix[b][i])
            b-=1
            if t>b:
                break
            for i in range(b,t-1,-1):
                out.append(matrix[i][l])
            l+=1
            if l>r:
                break
        return out

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章