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

 

posted @ 2020-07-26 19:37  __rookie  阅读(85)  评论(0编辑  收藏  举报