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