不同路徑(LeetCode)

2021-09-07 15:33:52 字數 1412 閱讀 9700

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

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

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

例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?

說明:m 和 n 的值均不超過 100。

示例 1:

輸入:m = 3, n = 2輸出:3解釋:從左上角開始,總共有 3 條路徑可以到達右下角。

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

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

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

示例 2:

輸入:m = 7, n = 3輸出:28
因為要準備一些認證,所以暫時不能採用python來刷題了。

這道題一開始我是用排列組合來做的,然後就超出數字的範圍了,即使是開了 long long int

emmmm...我感覺我人生最黑暗的時候要來臨了。

所以只能改用dp。

已知狀態轉移方程

因為路線只能向下或向右,所以

當i,j>=2時,dp[i,j] = d[i-1,j] + d[i,j-1] 。

注意。它的7x3矩陣是相當於陣列的3x7

觀察到d[0][j]和d[i][0]實際上都是只有一種走法,所以有如下**

class solution ;

for(int i=0;ipython倒是可以用排列組合解,因為python的長度夠用

排列組合解法:

已知m,n為重點,1,1為起點,則要走的步數為m-1 + n-1

然後思考一下,這裡它只能向下或向右,那就說明了有m-1步是向右的,n-1步是向下的

那用排列組合c(n+m-2)(n-1)就可以得出解

class solution:

def uniquepaths(self, m, n):

""":type m: int

:type n: int

:rtype: int

"""ln,lm = 1,1

for i in range(1,n):ln = ln*i

for i in range(m,n+m-1): lm = lm*i

return lm//ln

執行用時: 44 ms, 在unique paths的python3提交中擊敗了94.81% 的使用者

不同路徑(leetcode)

題目 物體怎樣從左上角移動到右下角,其中1表示有障礙,不能行走。思路 知道整個方框的行和列。對第一行和第一列進行填充1,當碰到1 障礙 填充0。本題可以被視為乙個動態規劃的問題,從上到下,從左到右,其中到達乙個終點的路徑總是左邊路徑 上面路徑。即 d p i j dp i 1 j dp i j 1 ...

leetcode不同路徑

1.深度優先搜尋 從finish點開始,往回走,每次是往上走,往右走,當回到0,0點時,路徑數量加1 如下 class solution void dfs int m,int n,int r,int c 但是這種方法可能會超時 2.利用數學公式 地圖矩陣為m行,n列,從左上角到右下角一共需要走m n...

LeetCode 不同路徑

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?示例 1 輸入 m 3,n 7 輸出 28 示例 2 輸入 m 3,n 2 輸出 3 解釋 從左上角...