有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。
机器人
每一时刻
只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为
'Finish'
)。
问有多少条不同的路径?
您在真实的面试中是否遇到过这个题?
Yes
样例
1,1 | 1,2 | 1,3 | 1,4 | 1,5 | 1,6 | 1,7 |
2,1 | ||||||
3,1 | 3,7 |
以上3 x 7的网格中,有多少条不同的路径?
注意
标签
Expand
n和m均不超过100
方法1:AC
public class Solution {
/**
* @param n, m: positive integer (1 <= n ,m <= 100)
* @return an integer
*/
public int uniquePaths(int m, int n) {
// write your code here
int a[][] = new int[m][n];
for(int i=0;i<m;i++){
a[i][0]=1;
}
for(int j=0;j<n;j++){
a[0][j]=1;
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
a[i][j] = a[i-1][j]+a[i][j-1];
}
}
return a[m-1][n-1];
}
}
/**
* @param n, m: positive integer (1 <= n ,m <= 100)
* @return an integer
*/
public int uniquePaths(int m, int n) {
// write your code here
int a[][] = new int[m][n];
for(int i=0;i<m;i++){
a[i][0]=1;
}
for(int j=0;j<n;j++){
a[0][j]=1;
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
a[i][j] = a[i-1][j]+a[i][j-1];
}
}
return a[m-1][n-1];
}
}
方法2:时间超限了,用递归实现动态规划。没有AC
public class Solution {
/**
* @param n, m: positive integer (1 <= n ,m <= 100)
* @return an integer
*/
public static int uniquePaths(int m, int n) {
// write your code here
while(1<=m&&1<=n){
if(1==m&&1==n){
return 1;
}
return uniquePaths(m-1,n)+uniquePaths(m, n-1);
}
return 0;
}
}
/**
* @param n, m: positive integer (1 <= n ,m <= 100)
* @return an integer
*/
public static int uniquePaths(int m, int n) {
// write your code here
while(1<=m&&1<=n){
if(1==m&&1==n){
return 1;
}
return uniquePaths(m-1,n)+uniquePaths(m, n-1);
}
return 0;
}
}