1. 程式人生 > 其它 >動態規劃題 leetcode

動態規劃題 leetcode

技術標籤:面試題Python動態規劃leetcode

1.62. 不同路徑

一個機器人位於一個 m x n網格的左上角 (起始點在下圖中標記為 “Start” )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為 “Finish” )。

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

示例 1:


輸入:m = 3, n = 7
輸出:28

示例2:

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

解法1: 動態規劃, 還是要發現其中的規律

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        # 隱含了 動態規劃思想: dp(i, j) = dp(i-1, j) + dp(i, j-1)
        # O(mxn) O(mxn)
        dp = []
        for i in range(m):
            temp = []
            for j in range(n):
                if i == 0: # 第一行 都為1 
                    temp.append(1)
                elif j == 0: # 第一列 都為1
                    temp.append(1)
                else: # 其餘先為0, 
                    temp.append(0)
            dp.append(temp)
        for i in range(1, m):
            for j in range(1, n):
                dp[i][j] = dp[i-1][j] + dp[i][j-1]  # 按照遞推式 計算; 
        return dp[-1][-1]