LeetCode 26 不同路徑

不同路徑 - LeetCode

問題描述

  • 一個機器人位於一個 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

問題分析

  因爲只能向下或者向右走,因此每種方案的向右步數和向下步數是一樣的。也就是Cn-1 m+n-2
  第二種方案,採用動態規劃的方法,因爲每一個位置只有來自上方和來自左邊兩種方案,所以每一步的總共走法等於左邊和上邊的到達方法總數

代碼

數學方案

def uniquePaths(self, m: int, n: int) -> int:
        return int(math.factorial(m+n-2)/math.factorial(m-1)/math.factorial(n-1))

動態規劃

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        cur = [1] * n
        for i in range(1, m):
            for j in range(1, n):
                cur[j] += cur[j-1]
        return cur[-1]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章