【算法題10 不同路徑問題】


1、不同路徑 I:來源LeetCode62題


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

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

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

例如,上圖是一個7 x 3 的網格。有多少可能的路徑?

說明:m 和 的值均不超過 100。

class Solution:
    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        aux=[[1 for i in range(n)] for i in range(m)]
        for i in range(1,m):
            for j in range(1,n):
                aux[i][j]=aux[i][j-1]+aux[i-1][j]
        return aux[-1][-1]
    
        # return math.factorial(m+n-2)/math.factorial(m-1)/math.factorial(n-1) #方法2

 

2、不同路徑 II:來源LeetCode63題

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

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

現在考慮網格中有障礙物。那么從左上角到右下角將會有多少條不同的路徑?

網格中的障礙物和空位置分別用 1 和 0 來表示。

說明:m 和 的值均不超過 100。

示例 1:

輸入:
[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
輸出: 2
解釋:
3x3 網格的正中間有一個障礙物。
從左上角到右下角一共有 2 條不同的路徑:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid):
        """
        :type obstacleGrid: List[List[int]]
        :rtype: int
        """
        m=len(obstacleGrid)
        n=len(obstacleGrid[0])
        res=[[1 for i in range(n)] for j in range(m)]
        if obstacleGrid[0][0]==1:
            return 0
        for i in range(m):
            for j in range(n):
                if obstacleGrid[i][j]==1:
                    res[i][j]=0
                else:
                    if i==0:
                        res[i][j]=res[i][j-1]
                    elif j==0:
                        res[i][j]=res[i-1][j]
                    else:
                        res[i][j]=res[i-1][j]+res[i][j-1]
        return res[-1][-1]
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM