LeetCode #62 Unique Paths
阿新 • • 發佈:2020-10-14
題目
解題方法
從最基礎的1*1開始找規律,此時起點就是終點,到達終點的獨特的路徑數為1,寫在方格內。
|1|
變化一下,2*2,此時從起點走到它右邊的格子有1種走法,走到下面的格子有1種走法,而走到終點的走法有1+1=2種,寫在方格內。
|1| |1|
|1| |2|
再變化一下,3*7,此時從起點走到它右邊所有格子都只有1種走法,走到下面所有格子也是1種走法,先寫在方格內。
|1| |1| |1| |1| |1| |1| |1|
|1| || || || || || ||
|1| || || || || || ||
如果此時把matrix[1][1]視為終點,就是22的情形,可以在對應的格子中寫出走法數,把matrix[2][2]視為終點,就是3
|1| |1| |1| |1| |1| |1| |1|
|1| |2| |3| |4| |5| |6| |7|
|1| |3| |6| |10| |15| |21| |28|
不難看出每個格子中的數字就是從左上角走到這個格子的unique path數。
那麼在程式設計時,我們可以一邊構造這個陣列,一邊計算每個格子的unique path數,首先初始化matrix=[[1]],然後把第一行構造出來。之後遍歷m和n,都是先單獨處理matrix[m][0],然後把後面的內容計算出來填進去即可,最後返回matrix[-1][-1]
程式碼
class Solution: def uniquePaths(self, m: int, n: int) -> int: matrix = [[1]] for i in range(n-1): matrix[0].append(1) for i in range(1, m): for j in range(n): if not j: matrix.append([1]) else: matrix[i].append(matrix[i-1][j] + matrix[i][j-1]) return matrix[-1][-1]