十一 不同路徑

2021-10-02 00:00:13 字數 1811 閱讀 9862

1、題目鏈結

知乎動態規劃理解

乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。 問總共有多少條不同的路徑?

輸入: m = 3, n = 2

輸出: 3

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

向右 -> 向右 -> 向下

向右 -> 向下 -> 向右

向下 -> 向右 -> 向右

2、分析

題目要求計算從某乙個點到另乙個點的行走的幾種方式,此題可以使用動態規劃來解,目標點(0, 0)到(i, j)的距離是,i-0 + j-0,使用動態規劃的幾個步驟有,1、分析動態規劃所屬的型別,2、建立狀態轉移方程 3、建立快取空間,此題的轉移方程為: f(i, j) = results[i][j-1] + results[i-1][j], results[i][j] 為上一步的快取位址,例如,如果讓你計算 1 + … 101 你肯定不會馬上計算出來,但是我們現在已知 1+…100的值,那麼將這個值存入到快取中,如果在計算1+…101 只需要在快取的基礎上+1即可。

3、**

class

solution

:def

uniquepaths

(self, m:

int, n:

int)

->

int:

results =[[

1]* n ]

* m # 用作儲存快取

for i in

range(1

, m)

:for j in

range(1

, n)

: results[i]

[j]= results[i]

[j-1

]+ results[i-1]

[j]return results[-1

][-1

]

斐波那契數列的動態規劃:

def

count_paths

(num)

:# 1 1 2 3 5

# 快取空間

results =

# 狀態轉移方程 results[i] = results[i-1] + results[i-2]

for i in

range

(num)

:if i <2:

1)else:1

]+ results[i-2]

)print

(results)

4、結果

執行用時 :

32 ms, 在所有 python3 提交中擊敗了88.45

% 的使用者

記憶體消耗 :

12.8 mb, 在所有 python3 提交中擊敗了98.84

%的使用者

5、優化在類似的動態規劃題中,可以優化記憶體的大小,此題中感覺沒有優化點的存在。

望您:

「情深不壽,強極則辱,謙謙君子,溫潤如玉」。

62 不同路徑63 不同路徑 II

62.不同路徑 動態規劃清晰步驟 1.定義dp陣列 2.初始化 3.迴圈填充 4.返回結果 class solution 4.返回結果 return dp m 1 n 1 動態規劃寫法2 內部解決初始化問題 class solution2 else if i 0 j 0 else if i 0 j ...

62 不同路徑

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

62 不同路徑

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