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 };