Unique Paths I | II leetcode
2015-12-12 00:41
483 查看
Unique Paths I
第一题还是比较简单的,robot只能向右和向下走,看到题目的第一个感觉就是使用递归,可能最近对递归有了一点情结。先看看递归实现的代码://@author jiangbo //time limit exceeded int uniquePaths(int m, int n) { if(m==1||n==1) return 1; return uniquePaths(m-1,n)+uniquePaths(m,n-1); }
代码非常的简洁明了,因为每次都有两种选择,知道m或者n任何一个为1. 很遗憾,Time Limit Exceeded;
再想想还有没有更好的方法,DP,对,因为到达一个方格的路径和方格的左边一个还有上面一个方格都有关系,因为只有这两个方格才能到达当前方格,而且路径数只需要简单的相加就可以。这样我们就可以使用一个二维数组m*n,每一个位置代表从[0,0]到达该方格的所有路径数,第一行和第一列初始化为1,后面依次就可以得到[m,n], 看代码,实现还是非常的简单。
//@author jiangbo int uniquePaths(int m, int n) { if(m==1||n==1) return 1; vector<vector<int>> path(m,vector<int>(n)); //初始化第一行和第一列为1 for(int i=0;i<n;++i){ path[0][i]=1; } for(int i=0;i<m;++i){ path[i][0]=1; } for(int i=1;i<m;++i){ for(int j=1;j<n;++j){ path[i][j] = path[i-1][j] + path[i][j-1]; } } return path[m-1][n-1]; }
Unique Paths II
相对于第一题就是在表格中添加了障碍物,这样,我们还是同样使用DP,只是需要增加一点额外的判断,当遇到障碍物的时候,需要跳过,代码如下,robot从表格外面一个地方进[0,0]int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m = obstacleGrid.size() , n = obstacleGrid[0].size(); vector<vector<int>> paths(m+1,vector<int>(n+1,0)); paths[0][1] = 1; for(int i = 1 ; i <= m ; ++i) for(int j = 1 ; j <= n ; ++j) if(!obstacleGrid[i-1][j-1]) paths[i][j] = paths[i-1][j]+paths[i][j-1]; return paths[m] ; }
相关文章推荐
- js模块化编程require.js学习摘记
- 如何修改系统UISearchBar的样式
- IOS--UITableViewCell上的按钮点击事件处理
- UIButton 设置背景图片 拉伸效果
- spark、hive、impala、hbase、gbase在结构化数据方面查询原理对比(含parquet/orc)
- UILabel控件属性
- 关于UI资源获取资源的好的网站
- Fluent API in Code-First【Code-First系列】
- Spark Working with Key/Value Pairs
- Segue NSTimer 和 Delayed perform
- 两种数据格式(Parquet/ORCfile)浅析
- [LeetCode]Unique Binary Search Trees
- 深入分析Parquet列式存储格式
- easyui databox获取当前时间
- Partition switch条件3:All index 必须相同(index,primary key 和 unique)
- iOS UISearchController中 如何改变UISearchBar中取消按钮的颜色和字
- 使用UICollectionView实现应用程序管理(删除图标 抖动效果)
- UITextField属性代理
- HDU4893:Wow! Such Sequence!(段树lazy)
- android122 zhihuibeijing 主页面使用fragment搭建