座標型動態規劃 不同路徑

2021-10-18 23:00:36 字數 2027 閱讀 6925

乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為 「start」 )。

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為 「finish」 )。

問總共有多少條不同的路徑?

示例 1:

輸入:m = 3, n = 2

輸出:3

解釋:從左上角開始,總共有 3 條路徑可以到達右下角。

1. 向右 -> 向下 -> 向下

2. 向下 -> 向下 -> 向右

3. 向下 -> 向右 -> 向下

從題目中應該能看出,該題是典型的網格類的座標型動態規劃和計數型動態規劃。

我們的最終目的是為了到達右下角,假設右下角座標為(n-1,m-1),因此最後一步要麼(n-2,m-1)向下要麼(n-1,m-2)向右。

如果倒數第二步在(n-1,m-2)那麼,前面一定記錄了從(0,0)到(n-1,m-2)所有路徑。

如果倒數第二步在(n-2,m-1)那麼,前面一定記錄了從(0,0)到(n-2,m-1)所有路徑。

上面描述了最後一步和子問題則可以確定狀態:f[i][j]表示從(0,0)到(i,j)的所有路徑方式

f[i][j]表示從(0,0)到(i,j)的所有路徑方式

初始條件:f[0][0]=1,因為機械人只有一種方式到達左上角

邊界情況:i=0或者j=0,則前面只有乙個方向過來,f[i][j]=1

還是逐行計算。

時間複雜度:o(mn),空間複雜度:o(mn)

這裡我才用了三種方式實現,注意對比。

class

solution

:def

uniquepaths

(self, m:

int, n:

int)

->

int:

dp =[[

0]*n for i in

range

(m)]

for i in

range

(m):

dp[i][0

]=1for i in

range

(n):

dp[0]

[i]=

1for i in

range(1

,m):

for j in

range(1

,n):

dp[i]

[j]=dp[i]

[j-1

]+dp[i-1]

[j]return dp[m-1]

[n-1

]class

solution

:def

uniquepaths

(self, m:

int, n:

int)

->

int:

dp=[1

]*nfor i in

range(1

,m):

for j in

range(1

,n):

dp[j]

+=dp[j-1]

print

(dp)

return dp[-1

]#採用組合數學的方式:

class

solution

:def

uniquepaths

(self, m:

int, n:

int)

->

int:

return comb(m + n -

2, n -

1)

動態規劃 不同路徑

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img yrgqqaoc 1607527...

動態規劃 不同路徑(I,II

不同路徑 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 10...

62 不同路徑 動態規劃

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?本質上就是乙個 楊輝三角。這是個楊輝三角形,每個位置的路徑 該位置左邊的路徑 該位置上邊的路徑 動態...