題目:
乙個機械人位於乙個 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。示例 ...