Python練習-LeetCode 第1篇 順時針列印矩陣
題目
第一次使用LeetCode,感覺還挺不錯的,在這裡寫簡單的一個演算法題題解:
劍指offer題之 順時針列印矩陣
還有英文版的,適合練一下英語,這裡就不放了。
解題思路
順時針列印矩陣,也稱為螺旋昇天列印演算法。
演算法比較簡單,我太菜,想不到什麼特別簡單的演算法,大概思路如下:
#虛擬碼
top = 0
left = 0
bottom = len(矩陣行) -1
right = len(矩陣列) -1
res = []
while true:
for 遍歷矩陣頂部
top++
if top>bottom: break
for 遍歷矩陣右邊
right--
if left>right: break
for 遍歷矩陣底部
bottom --
if top>bottom: break
for 遍歷矩陣左部
left ++
if left>right: break
print(res)
用圖表示為下圖:
每次遍歷一條矩陣的邊,遍歷完了就跳出迴圈
程式碼
在這裡就不展示矩陣類和生成函式了,直接寫迴圈的函式程式碼,如下所示:
class Solution:
def spiralOrder(self, matrix:[[int]]) -> [int]:
if len(matrix) ==0:
return []
l = 0 #左邊
r = len(matrix[0]) - 1 #右邊 這裡需要減一
t = 0 #上邊
b = len(matrix) - 1 #下邊
res = [] #結果列表
while True:
for i in range(l, r + 1):
res.append(matrix[t][i]) # left to right
t += 1
if t > b:
break
for i in range(t, b + 1):
res.append(matrix[i][r]) # top to bottom
r -= 1
if l > r:
break
for i in range(r, l - 1, -1):
res.append(matrix[b][i]) # right to left
b -= 1
if t > b:
break
for i in range(b, t - 1, -1):
res.append(matrix[i][l]) # bottom to top
l += 1
if l > r:
break
return res
有的小夥伴要問了,在開始的定義的時候,為什麼要減一呢?
好問題!
因為在後面的while 迴圈中,可以很清楚的看到,如果不減一,那麼為了正常輸出,在圈出的位置要改為r
(r+1 =》 r)
而這樣的話會導致矩陣四個角的位置會錄入結果列表res兩次。
所以為了避免這種情況需要做出一個調整。
當然也可以在第二個for迴圈中
的 t 改為 t + 1
都是一個意思,就不多說了。
總結
總而言之,對於初學者而言,還是比較友好的。(對於我這種大三菜雞)
相關文章
- 順時針列印矩陣矩陣
- 【劍指offer】順時針列印矩陣矩陣
- 劍指offer-19:順時針列印矩陣矩陣
- JZ-019-順時針列印矩陣矩陣
- 劍指offer面試題29:順時針列印矩陣面試題矩陣
- 劍指 Offer 29-順時針列印矩陣c++矩陣C++
- 力扣 - 劍指 Offer 29. 順時針列印矩陣力扣矩陣
- JS實現順時針列印陣列JS陣列
- [每日一題] 第二十一題:順時針列印矩陣每日一題矩陣
- 第四章:多維陣列和矩陣 --------------- 4.1 基礎題:順時針列印二維陣列陣列矩陣
- 1,2,3…n*n 的數字按照順時針螺旋的形式列印成矩陣(遞迴)矩陣遞迴
- cuda矩陣練習(一)矩陣
- 一個針對 Python 語句執行順序的練習Python
- JAVA列印有序矩陣Java矩陣
- leetcode:螺旋矩陣LeetCode矩陣
- Java 實現順時針螺旋二維陣列輸出Java陣列
- python練習冊-第0000題Python
- LeetCode 59. 螺旋矩陣 II(python、c++)LeetCode矩陣PythonC++
- Python程式碼閱讀(第41篇):矩陣轉置Python矩陣
- 劍指offer之順序列印陣列陣列
- [Leetcode]59.螺旋矩陣ⅡLeetCode矩陣
- Leetcode 566.重塑矩陣LeetCode矩陣
- python練習冊-第0002題Python
- Book of Shaders 02 - 矩陣:二維仿射變換練習矩陣
- 演算法學習:矩陣快速冪/矩陣加速演算法矩陣
- 楊氏矩陣:查詢x是否在矩陣中,第K大數矩陣
- 矩陣置零—leetcode73矩陣LeetCode
- matlab練習程式(線性常微分方程組矩陣解)Matlab矩陣
- 愛奇藝矩陣管理工具,多個矩陣同時管理矩陣
- [java]練習:列印對稱菱形Java
- LeetCode 74——搜尋二維矩陣LeetCode矩陣
- leetcode陣列練習題2:283. 移動零LeetCode陣列
- 生成螺旋矩陣(方陣、矩陣)矩陣
- python輸入詳解(陣列、矩陣)Python陣列矩陣
- lisp 習題 矩陣旋轉Lisp矩陣
- 第6章 圖的學習總結(鄰接矩陣&鄰接表)矩陣
- JAVA 陣列 練習Java陣列
- 陣列練習題陣列