62 不同路徑(python3)

2021-10-14 03:16:48 字數 1399 閱讀 9098

題目:

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

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

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

示例 1:

輸入:m = 3, n = 7

輸出:28

示例 2:

輸入:m = 3, n = 2

輸出:3

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

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

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

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

示例 3:

輸入:m = 7, n = 3

輸出:28

示例 4:

輸入:m = 3, n = 3

輸出:6

1 <= m, n <= 100

題目資料保證答案小於等於 2 * 109

注:示例2解釋可看出m和n寫反了,m=2,n=3

解題思路:

經典動態規劃,轉移方程dp[i][j] = dp[i-1][j]+dp[i][j-1],其中dp[i][j]表示走到(i,j)位置上的路徑有多少條。轉移方程一般從最後一步倒推,即寫出走最後一步的方程。由於機械人每次只能向下或向右移動一步,所以要走到(i,j),上一步一定是(i-1,j)或(i,j-1),走到(i,j)的路徑數dp[i][j]就等於走到(i-1,j)的路徑數dp[i-1][j]與走到(i,j-1)的路徑數dp[i][j-1]之和。注意dp是二維陣列,所以一般初始值不是個別一兩個值,而是邊界一行值或一列值。機械人在走dp[i][0]和dp[0][j]時都只有一種走法(要麼全向下,要麼全向右),所以初始值dp[i][0]=1、dp[0][j]=1。

**:

class solution:

def uniquepaths(self, m: int, n: int) -> int:

dp = [[0] * n for _ in range(m)]

for i in range(m):

for j in range(n):

if(i == 0):

dp[i][j] = 1

elif(j == 0):

dp[i][j] = 1

else:

dp[i][j] = dp[i - 1][j] + dp[i][j - 1]

return dp[m - 1][n - 1]

測試:

if __name__ == "__main__":

m = 3

n = 3

res = solution().uniquepaths(m, n)

print(res)

leetcode 不同路徑 python3

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

62 不同路徑

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

62 不同路徑

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