Leetcode 63. Unique Paths II
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1
and 0
respectively in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[
[0,0,0],
[0,1,0],
[0,0,0]
]
The total number of unique paths is 2
.
Note: m and n will be at most 100.
思路:动态规划题。
一开始边界的初始化很重要,其他的位置,如果是1,则置为0,否则的dp[i][j] = dp[i-1][j] + dp[i][j-1];
1 class Solution { 2 public: 3 int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { 4 if(obstacleGrid.size() == 0 || obstacleGrid[0].size() == 0) 5 return 0; 6 int dp[101][101], i, j; 7 if(obstacleGrid[0][0] == 0){ 8 dp[0][0] = 1; 9 } 10 else{ 11 return 0; 12 } 13 14 for(i = 1; i < obstacleGrid.size(); i++){ 15 if(obstacleGrid[i][0] == 0 && dp[i-1][0] == 1) 16 dp[i][0] = 1; 17 else 18 dp[i][0] = 0; 19 } 20 21 for(j = 1; j < obstacleGrid[0].size(); j++){ 22 if(obstacleGrid[0][j] == 0 && dp[0][j-1] == 1) 23 dp[0][j] = 1; 24 else 25 dp[0][j] = 0; 26 } 27 28 for( i = 1; i < obstacleGrid.size(); i++){ 29 for(j = 1; j < obstacleGrid[0].size(); j++){ 30 if(obstacleGrid[i][j] == 0) 31 dp[i][j] = dp[i-1][j] + dp[i][j-1]; 32 else 33 dp[i][j] = 0; 34 } 35 } 36 37 return dp[i-1][j-1]; 38 39 } 40 };
可以进行代码优化,节省空间。。。以后再说吧
越努力,越幸运