題目要求:
給定乙個矩陣,按螺旋順序輸出各個元素
例子:輸入:
[[ 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...