1. 程式人生 > >24.不同路徑-Leetcode 062(python)

24.不同路徑-Leetcode 062(python)

  • 題目描述

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

  • 思路

動態規劃方法:最左一列和最上邊一行的走法都只有一種,其他格子的走法等於該格子左側一格的走法加上該格子上側一格的走法。

數學上的解決方案是,從起點走到終點一共要走的步數為(m-1)+(n-1),從其中選m-1步往下走,或者選n-1步往右走即可。

  • 程式碼
class Solution(object):
    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        if m == 1 or n == 1:
            return 1
        #建立陣列,儲存每個格子的走法數量,第一行和第一列都是1
        path_count = [[1 for _ in range(m)] for _ in range(n)]

        for i in range(1,n):
            for j in range(1,m):
                #每一個格子的走法數量= 它上面一格的走法數量+它左面一格的走法數量
                path_count[i][j] = path_count[i-1][j] + path_count[i][j-1]
        #返回最後一個格子的值
        return path_count[-1][-1]
  • 技巧

列表生成式法建立二維陣列

test = [[0 for i in range(m)] for j in range(n)]