Unique Paths II-leetcode
2015-11-22 16:45
453 查看
这道题是Uniue Paths的一个变种,却然我受益匪浅。
由于第一道题目我使用排列组合的算法做的,导致这道题目用同样的办法就会很麻烦。
使用第一问的结论来进行求解,将每个障碍划分为障碍之上和障碍之下的部分。但是多个障碍有一些会重复加减,就涉及到类似于概率论当中的加上每一个,减去两个交集,加上三个个的交集以此类推。虽然编码可以实现但真的是略显麻烦,而且容易出错。相信题目应该没有这么难,就看了其他人的讨论。果然是很简洁的做法。用到了叫什么“动态规划”的思想,让我这个算法渣渣再次感叹。就是每一个等于相邻的关系的之和,一次类推。边缘的特殊情况作为初始状态。
但是我之前的第一题的算法,从某种程度上(就是数值运算交给一个绝对高效的数学库)将时间复杂度为1。这是一种从排列组合,也就是其他抽象问题迁移过来的思路,将所要解决的问题抽象了。但是一旦问题有所变动,那么高度抽象的方法就需要很多很多的变动。甚至变得格外复杂。
而更加模拟原问题情景的算法在面对问题的变动的时候,可以按照原问题的思路来进行情况处理。
由于第一道题目我使用排列组合的算法做的,导致这道题目用同样的办法就会很麻烦。
使用第一问的结论来进行求解,将每个障碍划分为障碍之上和障碍之下的部分。但是多个障碍有一些会重复加减,就涉及到类似于概率论当中的加上每一个,减去两个交集,加上三个个的交集以此类推。虽然编码可以实现但真的是略显麻烦,而且容易出错。相信题目应该没有这么难,就看了其他人的讨论。果然是很简洁的做法。用到了叫什么“动态规划”的思想,让我这个算法渣渣再次感叹。就是每一个等于相邻的关系的之和,一次类推。边缘的特殊情况作为初始状态。
按照这种思路,两道题目都可以迎刃而解。
但是我之前的第一题的算法,从某种程度上(就是数值运算交给一个绝对高效的数学库)将时间复杂度为1。这是一种从排列组合,也就是其他抽象问题迁移过来的思路,将所要解决的问题抽象了。但是一旦问题有所变动,那么高度抽象的方法就需要很多很多的变动。甚至变得格外复杂。
从这种意义上将,貌似方法没有贵贱之分,只有具体问题的具体的最合适的情况。
而更加模拟原问题情景的算法在面对问题的变动的时候,可以按照原问题的思路来进行情况处理。
之前我还设想过一个算法,就是没经过一个分裂点就产生一个新的线程,每个线程到达终点以后为全局变量加一,这样似乎更加真是的模拟了对于不同路径的行走,但是起开销确实是过于庞大。
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m=obstacleGrid.length; int n; if(m==0){ return 0; }else{ n=obstacleGrid[0].length; } int[][] dept=new int [m] ; boolean rawflag=false; boolean colflag=false; for(int i=0;i<m;i++){//make the grid plugin to wall 1,because there is only one way to. if(obstacleGrid[i][0]==1||rawflag==true){ rawflag=true; dept[i][0]=0; }else{ dept[i][0]=1; } } for(int i=0;i<n;i++){ if(obstacleGrid[0][i]==1||colflag==true){ colflag=true; dept[0][i]=0; }else{ dept[0][i]=1; } } for(int i=1;i<m;i++){ for(int j=1;j<n;j++){ if(obstacleGrid[i][j]==1){ dept[i][j]=0; }else{ dept[i][j]=dept[i][j-1]+dept[i-1][j]; } } } return dept[m-1][n-1]; } }
相关文章推荐
- cocoapods 0.35.0 版本 报错 Parsing unable to continue due to parsing error:
- UIBezierPath的自定义路径绘图
- LeetCode 062 Unique Paths
- CALayer 为什么选择 cg 开头 而 不选择 UI 开头
- Hbuilder--让手爽,飞一般的编码(二)
- ios UIButton的创建和使用入门
- UILabel
- HDU5538 House Building(简单计算)
- [leetcode-307]Range Sum Query - Mutable(java)
- SqlConnectionStringBuilder基础
- Druid:一个用于大数据实时处理的开源分布式系统
- LeetCode OJ:N-Queens(N皇后问题)
- UIImage与UIImageView属性总结以及手势识别器
- ContentProvider android:exported = “true”
- uint8_t , uint16_t,uint32_t,uint64_t
- UIStactView 新特性语法新介绍
- 排序算法的时间复杂度比较(quick_sort;bubble_sort)
- easyui环境搭建01
- Hbuilder--让手爽,飞一般的编码
- UI事件处理:手势处理