LintCode_不同的路径
2015-10-28 21:27
106 查看
问题描述:
有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为'Finish')。问有多少条不同的路径?
样例
以上3 x 7的网格中,有多少条不同的路径?
注意:n和m均不超过100
算法思想:关键点在于:(m,n)=(m-1,n)+(m,n-1);
方法一:递归算法(这种算法虽然可以用,但是比较耗时间)
public int uniquePaths(int m, int n) {
if(m==1||n==1){
return 1;
}
if(m==2){
return n;
}
if(n==2){
return m;
}
return uniquePaths(m-1,n)+uniquePaths(m,n-1);
}
方法二:采用数组存储路径数:
public int uniquePaths(int m, int n) {
int[][] path=new int[100][100];
for(int i=0;i<n;i++){
path[0][i]=1;
}
for(int j=0;j<m;j++){
path[j][0]=1;
}
for(int p=1;p<m;p++){
for(int q=1;q<n;q++){
path[p][q]=path[p-1][q]+path[p][q-1];
}
}
return path[m-1][n-1];
}
有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为'Finish')。问有多少条不同的路径?
样例
1,1 | 1,2 | 1,3 | 1,4 | 1,5 | 1,6 | 1,7 |
2,1 | ||||||
3,1 | 3,7 |
注意:n和m均不超过100
算法思想:关键点在于:(m,n)=(m-1,n)+(m,n-1);
方法一:递归算法(这种算法虽然可以用,但是比较耗时间)
public int uniquePaths(int m, int n) {
if(m==1||n==1){
return 1;
}
if(m==2){
return n;
}
if(n==2){
return m;
}
return uniquePaths(m-1,n)+uniquePaths(m,n-1);
}
方法二:采用数组存储路径数:
public int uniquePaths(int m, int n) {
int[][] path=new int[100][100];
for(int i=0;i<n;i++){
path[0][i]=1;
}
for(int j=0;j<m;j++){
path[j][0]=1;
}
for(int p=1;p<m;p++){
for(int q=1;q<n;q++){
path[p][q]=path[p-1][q]+path[p][q-1];
}
}
return path[m-1][n-1];
}
相关文章推荐
- 场内营销、场外营销、泛营销
- 次短路(第二最短路径)
- JPA EntityManager详解(一)
- C语言中堆!
- Android开发手记(16) 数据存储一 SharedPreferences
- 智能车学习(十一)——陀螺仪学习
- 1-5章总结
- Tomcat 基础知识
- 将一个BOOL值插入到NSMutableDictionary中
- C#写的64位windows窗口应用程序打包安装后提示“未能加载文件或程序集‘System.Data.SQLite’”解决方法
- xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)
- iOS设计模式 - 访问者
- #在蓝懿学习iOS的日子#Day6
- Java学习——1——面向对象
- SpringMVC-控制器、映射器、视图解析器
- POJ3128 Leonardo's Notebook【置换群】
- JS 代码调试经验总结(菜鸟必读)
- 爬爬爬之路:OC语言(三) 继承
- xclip----建立终端和剪切板之间的通道
- ASP.NET中服务器控件的生命周期