乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
問總共有多少條不同的路徑?
易知start——>finish需要m+n-2個小方格,一定會有n-1個小方格是向右,m-1個方格向下。所能得到的不同路徑即從m+n-2個方格中挑選出m-1個向下的組合問題:
c (m
−1m+
n−2)
=(m+
n−2)
!(m−
1)!∗
(n−1
)!c\binom =\frac
c(m+n−
2m−1
)=(
m−1)
!∗(n
−1)!
(m+n
−2)!
class
solution
:def
uniquepaths
(self, m:
int, n:
int)
->
int:
deffactor
(num)
: res =
1for i in
range(1
, num+1)
: res *= i
return res
ans = factor(m+n-2)
//(factor(m-1)
* factor(n-1)
)return ans
執行用時 :28 ms, 在所有 python3 提交中擊敗了93.11%的使用者math庫記憶體消耗 :13.1 mb, 在所有 python3 提交中擊敗了54.27%的使用者
def
uniquepaths
(self, m:
int, n:
int)
->
int:
return
int(math.factorial(m+n-2)
/math.factorial(m-1)
/math.factorial(n-1)
)
所謂動態規劃,即求解決策過程(decision process)最優化的數學方法。把多階段過程轉化為一系列單階段問題,利用各階段之間的關係,逐個求解。
動態規劃的適用條件:必須滿足最優化原理和無後效性。
最優化原理:乙個最優化策略具有這樣的性質,不論過去狀態和決策如何,對前面的決策所形成的狀態而言,餘下的諸決策必須構成最優策略。簡而言之,乙個最優化策略的子策略總是最優的。乙個問題滿足最優化原理又稱其具有最優子結構性質。
無後效性:對於某個給定的階段狀態,它以前各階段的狀態無法直接影響它未來的決策,而只能通過當前的這個狀態。
雖然題目標籤有動態規劃,但是看題解我是懵逼的,直到我看到了這一篇:小學題。
對於mxn的表,從start出發要到達最左邊和最上面的格仔,都只有一條路徑。
#**數字表示路徑數
對於任一空白格,所能到達的路徑即是左邊和上面格仔路徑數的總和。
由此,易得動態規劃演算法:
1、給出**:dp=[[1]*n] +[[1]+[0]*(n-1) for _ in range(m-1)]
2、dp[i][j]=dp[i][j-1]+dp[i-1][j]
class
solution
:def
uniquepaths
(self, m:
int, n:
int)
->
int:
dp=[[
1]*n]+[[
1]+[
0]*(n-1)
for _ in
range
(m-1)]
for 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
]
執行用時 :36 ms, 在所有 python3 提交中擊敗了59.99%的使用者空間複雜度為o(mn)記憶體消耗 :13.2 mb, 在所有 python3 提交中擊敗了53.41%的使用者
二維陣列優化為一維陣列的方法:
由於最右邊界都為1,即整個最右邊界的取值都可以用dp[0][0]
來替代
第一層for-i迴圈用作計數;第二層for-j迴圈進行動態規劃。
每一次迴圈都是更新源列表。
]
執行用時 :28 ms, 在所有 python3 提交中擊敗了93.02%的使用者記憶體消耗 :13 mb, 在所有 python3 提交中擊敗了53.82%的使用者
力扣 動態規劃 不同路徑
描述 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。...
力扣 65不同路徑
最近在刷力扣上的題目,刷到了65不同路徑,當初上大學的時候,曾在hihocoder上刷到過這道題目,但是現在已經幾乎全忘光了,大概的知識點是動態規劃,如今就讓我們一起來回顧一下。題目原文是 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動...
力扣62 不同路徑
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?示例 1 輸入 m 3,n 7 輸出 28 示例 2 輸入 m 3,n 2 輸出 3 解釋 從左上角...