63. Unique Paths II

https://leetcode.com/problems/unique-paths-ii/

本题大意:本题是Unique Paths的扩展。试想,如果对上一题表格中加入一些障碍,用1来表示,那么可行的路径应该有多少条呢?

例如:          那么路径的个数应该为2。

[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
解题思路:这是一道典型的用动态规划解决的问题。假设用f[i][j]从起点到第i行第j列可行的路径条数,那么f[i][j]的值取决去f[i-1][j]、f[i][j-1]和nums[i][j]的值(这里是和上一题的区别)。如果nums[i][j]=1,那么不用考虑其他,立即得f[i][j]=0;如果nums[i][j]=0,那么f[i][j]=f[i-1][j]+f[i][j-1]。这里要注意的是对边界的处理。
代码如下:
 1 class Solution {
 2 public:
 3     int uniquePathsWithObstacles(vector<vector<int> >& obstacleGrid) {
 4         if(obstacleGrid.size() == 0) return 0;
 5         int row = obstacleGrid.size();
 6         int col = obstacleGrid[0].size();
 7         int f[row][col];
 8 
 9         for(int i = 0; i < row; i++)
10         {
11             for(int j = 0; j < col; j++)
12                 f[i][j] = 0;
13         }
14 
15         if(obstacleGrid[0][0] == 0) f[0][0] = 1;
16         else return 0;
17 
18         for(int i = 0 ; i < row; i ++),
19         {
20             for(int j = 0; j < col; j ++)
21             {
22                 if(obstacleGrid[i][j] == 1) f[i][j] = 0;
23                 else
24                 {
25                     if(i >= 1) f[i][j] += f[i-1][j];
26                     if(j >= 1) f[i][j] += f[i][j-1];
27                 }
28             }
29         }
30         return f[row-1][col-1];
31     }
32 };
原文地址:https://www.cnblogs.com/jingyuewutong/p/5584493.html