leetcode 54螺旋矩陣

2021-09-29 17:48:45 字數 1789 閱讀 6587

題目要求:

給定乙個矩陣,按螺旋順序輸出各個元素

例子:輸入:

[[ 1, 2, 3 ],

[ 4, 5, 6 ],

[ 7, 8, 9 ]

]輸出: [1,2,3,6,9,8,7,4,5]

思路:模擬螺旋線路,進行迴圈

每個大迴圈中巢狀四個小迴圈

分別輸出該次迴圈右下左上順序歷遍的元素

即 最外層迴圈中包括

右向迴圈輸出123

下迴圈輸出69

左迴圈輸出87

上迴圈輸出4

實現:思路很簡單,但是對於迴圈邊界的確定需要仔細思考,防止重複,遺落或者下標越界

定義now_row now_col兩個變數,記錄當前迴圈開始位置所處於的行列號。

然後根據規律,每次迴圈和上次迴圈,必定有行或者列之一保持一直,剩下的乙個座標為前一次座標的±1範圍。整個迴圈的終止條件為輸出長度等於矩陣中總的元素數量

還有就是每次輸出之後,那下一次行或列的長度,就需要減一以防止輸出重複元素

**

class

solution

:def

spiralorder

(self, matrix)

: m =

0 now_r =

0 row_lenth =

len(matrix)

col_lenth =

len(matrix[0]

) all_num = row_lenth*col_lenth

now_c =

0 res =

while

(len

(res)

:for j in

range

(now_c,now_c+col_lenth)

:[j])if

len(res)

== all_num:

break

now_r = m+

1 row_lenth-=

1for p in

range

(now_r,now_r+row_lenth)

:[j])if

len(res)

== all_num:

break

now_c = j-

1 col_lenth-=

1for q in

range

(now_c,now_c-col_lenth,-1

):[q])

iflen

(res)

== all_num:

break

now_r = p-

1 row_lenth-=

1for m in

range

(now_r,now_r-row_lenth,-1

):[q])

iflen

(res)

== all_num:

break

now_c = q +

1 col_lenth-=

1return res

matrix =[[

1,2,

3,4]

,[5,

6,7,

8],[

9,10,

11,12]

]print

(solution(

).spiralorder(matrix)

)

LeetCode 54 螺旋矩陣

給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...

leetcode54 螺旋矩陣

給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...

leetcode 54 螺旋矩陣

給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 思路是 方向陣列 邊界調整 如下 class solution void matain int x,int...