1. 程式人生 > 實用技巧 >LeetCode #62 Unique Paths

LeetCode #62 Unique Paths

題目

Unique Paths


解題方法

從最基礎的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

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]