[LeetCode] Unique Paths II 不同的路径之二
2015-03-20 15:13
513 查看
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
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
The total number of unique paths is
Note: m and n will be at most 100.
这道题是之前那道 Unique Paths 不同的路径 的延伸,在路径中加了一些障碍物,还是用动态规划Dynamic Programming来解,不同的是当遇到为1的点,将该位置的dp数组中的值清零,其余和之前那道题并没有什么区别,代码如下:
解法一:
或者我们也可以使用一维dp数组来解,省一些空间,参见代码如下:
解法二:
类似题目:
Unique Paths
LeetCode All in One 题目讲解汇总(持续更新中...)
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
1and
0respectively 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.
这道题是之前那道 Unique Paths 不同的路径 的延伸,在路径中加了一些障碍物,还是用动态规划Dynamic Programming来解,不同的是当遇到为1的点,将该位置的dp数组中的值清零,其余和之前那道题并没有什么区别,代码如下:
解法一:
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { if (obstacleGrid.empty() || obstacleGrid[0].empty() || obstacleGrid[0][0] == 1) return 0; vector<vector<int> > dp(obstacleGrid.size(), vector<int>(obstacleGrid[0].size(), 0)); for (int i = 0; i < obstacleGrid.size(); ++i) { for (int j = 0; j < obstacleGrid[i].size(); ++j) { if (obstacleGrid[i][j] == 1) dp[i][j] = 0; else if (i == 0 && j == 0) dp[i][j] = 1; else if (i == 0 && j > 0) dp[i][j] = dp[i][j - 1]; else if (i > 0 && j == 0) dp[i][j] = dp[i - 1][j]; else dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; } } return dp.back().back(); } };
或者我们也可以使用一维dp数组来解,省一些空间,参见代码如下:
解法二:
// DP class Solution { public: int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) { if (obstacleGrid.empty() || obstacleGrid[0].empty()) return 0; int m = obstacleGrid.size(), n = obstacleGrid[0].size(); if (obstacleGrid[0][0] == 1) return 0; vector<int> dp(n, 0); dp[0] = 1; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (obstacleGrid[i][j] == 1) dp[j] = 0; else if (j > 0) dp[j] += dp[j - 1]; } } return dp[n - 1]; } };
类似题目:
Unique Paths
LeetCode All in One 题目讲解汇总(持续更新中...)
相关文章推荐
- LeetCode题库解答与分析——#63.不同路径IIUniquePathsII
- LintCode UniquePathsII 不同的路径II
- [Leetcode] unique paths ii 独特路径
- [LeetCode]20. Unique Paths II唯一路径
- LeetCode OJ 之 Unique Paths II(不同路径 - 二)
- lintcode unique-paths-ii 不同的路径ii
- [LeetCode] Unique Paths II 起点与终点确定的路径数II
- 【LeetCode-面试算法经典-Java实现】【063-Unique Paths II(唯一路径问题II)】
- Leet Code 63 Unique Paths II - 不同路径 - Java
- LeetCode | Unique Paths II(唯一路径II)
- 【LeetCode-面试算法经典-Java实现】【063-Unique Paths II(唯一路径问题II)】
- 【LeetCode】Unique Paths II
- LeetCode: Unique Paths II
- leetcode - Unique Paths II
- LeetCode题解:Unique Paths II
- leetcode -- Unique Paths II
- [LeetCode]Unique Paths II
- LeetCode:Unique Paths II
- [LeetCode]Unique Paths I & II
- Unique Paths II 求在矩阵里从左上走到右下的总方法数(有障碍)@LeetCode