【算法題10 不同路徑問題】
阿新 • • 發佈:2018-05-02
tac pro 輸入 tps ems pan tco apple sel
1、不同路徑 I:來源LeetCode62題
一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。
問總共有多少條不同的路徑?
例如,上圖是一個7 x 3 的網格。有多少可能的路徑?
說明:m 和 n 的值均不超過 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 和 n 的值均不超過 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]
【算法題10 不同路徑問題】