題目
輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字。
示例 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