Unique Paths II-leetcode
来源:互联网 发布:c语言宿舍管理系统 编辑:程序博客网 时间:2024/06/14 07:35
这道题是Uniue Paths的一个变种,却然我受益匪浅。
由于第一道题目我使用排列组合的算法做的,导致这道题目用同样的办法就会很麻烦。
使用第一问的结论来进行求解,将每个障碍划分为障碍之上和障碍之下的部分。但是多个障碍有一些会重复加减,就涉及到类似于概率论当中的加上每一个,减去两个交集,加上三个个的交集以此类推。虽然编码可以实现但真的是略显麻烦,而且容易出错。相信题目应该没有这么难,就看了其他人的讨论。果然是很简洁的做法。用到了叫什么“动态规划”的思想,让我这个算法渣渣再次感叹。就是每一个等于相邻的关系的之和,一次类推。边缘的特殊情况作为初始状态。
按照这种思路,两道题目都可以迎刃而解。
但是我之前的第一题的算法,从某种程度上(就是数值运算交给一个绝对高效的数学库)将时间复杂度为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][n]; 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]; }}
0 0
- 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
- 【LeetCode】Unique Paths II
- leetcode Unique Paths II
- LeetCode Unique Paths II
- LeetCode | Unique Paths II
- Leetcode: Unique Paths II
- LeetCode Unique Paths II
- Unique Paths II -- LeetCode
- [LeetCode] Unique Paths II
- 小技巧之nvidia-smi
- Leet Code 100 Same Tree
- 分布式监控系统Ganglia学习------(1)基本原理
- Android 实现滑动的几种方法(一)onLayout方法 和 offsetLeftAndRight()与offsetTopAndBottom();
- 【Java多线程编程】主线程对其他线程的控制
- Unique Paths II-leetcode
- JSP中getParameter与getAttribute有何区别?
- tcpdump 参数详解
- easyui环境搭建02
- 多媒体封装格式学习:H264封装成FLV(二)
- js数组存储对象及对象的获取
- 获取字符串中字母出现的个数
- HDU 2070 叠框
- Xcode cannot run using the selected device-无法真机调试