leetcode第一刷_Unique Paths II
来源:互联网 发布:膝盖伸直有响声 知乎 编辑:程序博客网 时间:2024/06/01 10:37
接着上面的问题,如果这个矩阵中有阻塞的障碍,就不能用前面的那种组合数的方法了,因为很多位置实际上是没有路的嘛。
剩下的合理解法只有dp了。跟那个求最小和的非常像,从右下角往前推算,对于一个位置(i, j),它的走法应该是(i+1, j)和(i, j+1)走法的和。对于边界条件还是有一些特殊,最后一行,从右往左,如果是0的话没有问题,等于右侧走法的个数,一旦遇到一个1,那么它以及它左边的走法都必须置成0,你可没有穿墙术。
我觉得题目明确说明了行列的个数,就是在暗示我们可以使用dp的方法,行列个数不大,空间直接开了也可以,也可以只保存下一行和右一列的。
class Solution {public: int row, col; int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) { row = obstacleGrid.size(); if(row == 0) return 0; col = obstacleGrid[0].size(); int p[105][105]; p[row-1][col-1] = obstacleGrid[row-1][col-1] == 0?1:0; int i, j; for(j=col-2;j>=0;--j){ if(obstacleGrid[row-1][j] == 0) p[row-1][j] = p[row-1][j+1]; else break; } for(i=j;i>=0;--i) p[row-1][i] = 0; for(j=row-2;j>=0;--j){ if(obstacleGrid[j][col-1] == 0) p[j][col-1] = p[j+1][col-1]; else break; } for(i=j;i>=0;--i) p[i][col-1] = 0; for(i=row-2;i>=0;--i){ for(j=col-2;j>=0;--j){ if(obstacleGrid[i][j] == 1) p[i][j] = 0; else p[i][j] = p[i][j+1] + p[i+1][j]; } } return p[0][0]; }};
0 0
- leetcode第一刷_Unique Paths II
- leetcode第一刷_Unique Paths
- leetcode第一刷_Unique Binary Search Trees II
- leetcode第一刷_Unique Binary Search Trees
- leetcode62&63&64_Unique Paths
- [leetcode刷题系列]Unique Paths II
- LeetCode刷题笔录Unique Paths II
- 开始刷leetcode day60: 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 II
- [leetcode] Unique Paths II
- LeetCode - Unique Paths II
- LeetCode:Unique Paths II
- RTP/RTCP流媒体服务器技术研究
- Codeforces 430A Points and Segments (easy)
- 关于mysql解决中文乱码问题
- 小明陪你编游戏系列(三)第一次重构与状态机的实现
- 21世纪初最有影响力的20篇计算机视觉期刊论文 及 邓亚峰老师关于人脸识别方面总结
- leetcode第一刷_Unique Paths II
- ubuntu下安装QQ2013
- 用ASP实现简单的繁简转换
- 一则微博的感悟——一辈子做一件事
- 九度 1056 最大公约数
- 流媒体专题—传输协议:rtp rtcp rtsp
- 换工作需要考虑的
- Fast, Accurate Detection of 100,000 Object Classes on a Single Machine 读后记录(转载)
- OPENGL学习系列——OPENGL是由谁发布和维护的