1. 程式人生 > 實用技巧 >LeetCode63 不同路徑2

LeetCode63 不同路徑2

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。

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

一樣的動態規劃,但是多了障礙物,其實只用把障礙物置為0就可以了。關鍵是起始點為障礙物怎麼處理,面試時需要和麵試官溝通好。

 1 class Solution {
 2 public:
 3     int uniquePathsWithObstacles(vector<vector<int
>>& obstacleGrid) { 4 int n=obstacleGrid.size(); 5 if(!n) 6 return 1; 7 int m=obstacleGrid[0].size(); 8 int dp[n][m]; 9 if(obstacleGrid[0][0]==1) 10 return 0; 11 dp[0][0]=1; 12 13 for(int i=0;i<n;++i){ 14 for
(int j=0;j<m;++j){ 15 if(i==0 && j==0) 16 continue; 17 int n1=i>=1?dp[i-1][j]:0; 18 int n2=j>=1?dp[i][j-1]:0; 19 if(obstacleGrid[i][j]==0){ 20 dp[i][j]=n1+n2; 21 } 22 else
{ 23 dp[i][j]=0; 24 } 25 } 26 } 27 return dp[n-1][m-1]; 28 } 29 };