LeetCode(63)Unique Paths II
2015-09-11 21:24
417 查看
题目
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,0,0],
[0,1,0], [0,1,0],
[0,0,0] [0,0,0]
]]
The total number of unique paths is 2.
Note: m and n will be at most 100.
分析
带障碍的路径数计算问题,这个题目与上一题的区别之处在于,m*n的矩阵中有部分设置了障碍,当然有障碍的地方不能通过;虽然设立了障碍,该题目的本质仍然是一个动态规划问题,我们只需要增加判断当前点是否有障碍的代码即可,若有障碍那么此处不能通行,自然f(i,j)=0f(i,j) = 0,对于其他点,依然用上一题目的推导公式即可!
AC代码
//直接用非递归算法求解 class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { if (obstacleGrid.empty()) return 0; int m = obstacleGrid.size(); int n = obstacleGrid[0].size(); vector<vector<int> > ret(m, vector<int>(n, 0)); //矩阵首列 for (int i = 0; i < m; i++) { //无障碍,则有一条路径,否则不通 if (obstacleGrid[i][0] != 1) ret[i][0] = 1; else break; }//for //矩阵首行 for (int j = 0; j < n; j++) { //无障碍,则有一条路径,否则不通 if (obstacleGrid[0][j] != 1) ret[0][j] = 1; else break; }//for //其余位置 for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { //当前位置为障碍,则到此处路径数为0 if (obstacleGrid[i][j] == 1) ret[i][j] = 0; else{ ret[i][j] = ret[i][j - 1] + ret[i - 1][j]; }//else }//for }//for return ret[m - 1][n - 1]; }//uniques };
GitHub测试程序源码
相关文章推荐
- LeetCode(63)Unique Paths II
- UI界面编写(仿QQ聊天界面)
- MySQL JDBC的queryTimeout坑
- LeetCode(62)Unique Paths
- LeetCode(62)Unique Paths
- iOS8下UILabel如何自适应高度(自动换行)
- IOS视图之UI基础
- TrueCrypt加密之后的取证方法(广东公安科技)
- UISlider
- UISegmetControl
- Machine Intelligence(Nature Insight 2015.5.28/Vol 521/Issue No 7553)
- IOS_UI_数据库
- UI:这段时间的小总结
- iOS开发之 UIAlertView 沙盒 归档
- iOS开发之 UITextField
- Storyboard中segue使用总结
- UE4ShaderPluginDemo
- UITableView Cell上添加按钮后改变选择状态
- iOS开发之 UILabel,UIButton
- 解决错误 Target runtime com.genuitec.runtime.generic.jee60 is not defined.