乙個機械人位於乙個 m∗n
m * n
m∗n 網格的左上角 (起始點在下圖中標記為「st
art」
「start」
「start
」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「fi
nish
」「finish」
「finis
h」)。現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?
網格中的障礙物和空位置分別用 1
11 和 0
00 來表示。
說明:m
mm 和 n
nn 的值均不超過 100
10010
0。示例 1:
輸入:[
[0,0,0],
[0,1,0],
[0,0,0]
]輸出: 2
解釋:3∗3
3*33∗
3 網格的正中間有乙個障礙物。
從左上角到右下角一共有 2 條不同的路徑:
向右 -> 向右 -> 向下 -> 向下
向下 -> 向下 -> 向右 -> 向右
解題思路:使用動態規劃,用乙個二維陣列dp[i][j]儲存狀態變數。
c++**如下所示:
class
solution
for(
int i=
1;i) # 初始化二維陣列的第一行
for(
int i=
1;i) # 遍歷二維陣列
if(a[i-1]
[j]==
1|| a[i]
[j-1]==
1) # 狀態轉移方程
dp[i]
[j]=
max(dp[i-1]
[j],dp[i]
[j-1])
;else # 狀態轉移方程
dp[i]
[j]= dp[i-1]
[j]+ dp[i]
[j-1];
}}return dp[hang-1]
[lie-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 來表示。說...