25.不同路徑II-Leetcode 062(python)
阿新 • • 發佈:2018-11-23
- 題目描述
一個機器人位於一個 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. 向下 -> 向下 -> 向右 -> 向右
- 解決思路
仍舊是動態規劃的方法,通過建立一個二維的表格記錄走到網格每個位置的路徑數。與上一道題幾乎是一模一樣的,不同僅僅在於有障礙,所以我們只需啊在上一題的基礎上加上一條判斷語句就行:
1. 如果當前網格的值為0,和上一題一樣
2. 如果當前網格的值為1,那麼,到此網格的路徑數歸0(不能到嘛,因為有障礙)
所以,對上一題的程式碼略作修改:
- 程式碼
class Solution(object): def uniquePathsWithObstacles(self, obstacleGrid): """ :type obstacleGrid: List[List[int]] :rtype: int """ m = len(obstacleGrid) if m == 0 or obstacleGrid[0][0] == 1: return 0 n = len(obstacleGrid[0]) record = [[1 for i in range(n)] for j in range(m)] for i in range(m): for j in range(n): if obstacleGrid[i][j] == 1: record[i][j] = 0 elif j == 0: record[i][j] = record[i - 1][j] elif i == 0: record[i][j] = record[i][j - 1] else: record[i][j] = record[i - 1][j] + record[i][j - 1] return record[m - 1][n - 1]