LeetCode Dynamic Programming_63.Unique Paths II(Medium)
問題敘述如下: 這個問題是 "Unique Paths" 的變體,但現在網格中包含一些障礙物。給定一個包含障礙物和空格的 m x n 網格,請找出從左上角到右下角的不同不含障礙物的獨特路徑數量。 障礙物和空格分別用 1 和 0 來表示。 有多少種不同的獨特路徑可以達到終點? 注意:m 和 n 最大不超過 100。 [ [0,0,0], [0,1,0], [0,0,0] ] 從左上角到右下角的不同不含障礙物的獨特路徑數為 2。 這個問題可以使用動態規劃(Dynamic Programming)解決,類似於 "Unique Paths" 問題。我們仍然使用一個二維數組 dp,其中 dp[i][j] 表示到達從左上角 (0, 0) 到 (i, j) 這個格子的不同獨特路徑數。但是,我們需要注意處理障礙物。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 class Solution { public: int uniquePathsWithObstacles(std::vector<std::vector< int >>& obstacleGrid) { int m = obstacleGrid.size(); int n = obstacleGrid[ 0 ].size(); // 如果起點或終點有障礙物,則無法到達終點,返回 0。 if (obstacleGrid[ 0 ][ 0 ] == 1 || obstacleGrid[m- 1 ][n- 1 ] == 1 ) return 0 ; // 創建大小為 (m x n) 的二維 DP 數組。 std::vector<std::vector< int >> dp(m, std::vector< int >(n, 0 )...