LeetCode 63 不同路徑 II(DP)

2022-06-13 10:06:10 字數 1189 閱讀 9100

本題目為 不同路徑 擴充套件題,區別在於增添有障礙物的情況。

題目描述

乙個機械人位於乙個 m x n 網格的左上角(起始點為圖中的 「start」),機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(圖中標記為 「finish」)。

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

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

示例 1:

輸入: [ [0,0,0], [0,1,0], [0,0,0] ]

輸出: 2

解釋: 3x3 網格的正中間有乙個障礙物,從左上角到右下角一共有 2 條不同的路徑:

向右 -> 向右 -> 向下 -> 向下

向下 -> 向下 -> 向右 -> 向右

題解思路

實現思路與 不同路徑 一樣,使用動態規劃求解。區別在於求狀態值時需要判斷當前座標是否有障礙物,如果有障礙物,當前狀態值為 0。其狀態轉移方程如下:

**實現

int

uniquepathswithobstacles

(int

** obstaclegrid,

int obstaclegridsize,

int* obstaclegridcolsize)

long

**status =

(long**

)malloc

(sizeof

(long*)

* obstaclegridsize)

;int i, j;

for(i =

0; i < obstaclegridsize; i++

)for

(i =

0; i < obstaclegridsize; i++

)else

if(i ==

0&& j !=0)

else

if(i !=

0&& j ==0)

else}}

return status[obstaclegridsize -1]

[*obstaclegridcolsize -1]

;}

LeetCode63 不同路徑

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說明 m...

LeetCode 63 不同路徑

看到這個題目的時候想到的是通過深度優先搜尋演算法進行求解,找到每一條能夠到達finish的路徑,並計數 1,最後得出的計數值即為解。程式設計後提交對於部分測試用例超時,程式如下 class solution if x 1 n 1 if y 1 m 1 int uniquepathswithobsta...

Leetcode 63 不同路徑

描述 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說...