容易 不同的路径
39%
通过
有一个机器人的位于一个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的网格中,有多少条不同的路径?
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
if( m == 0 || n == 0){
return 0;
}
int [][] sum = new int[m][n];
//第一列,竖着走只有一种方法,只能从上面来
for(int i = 0 ; i < m ; i++){
sum[i][0] = 1;
}
//第一行,横着走只有一种方法,只能从左边来
for(int j = 0 ; j < n ; j++){
sum[0][j] =1;
}
for(int i =1; i < m; i++){
for(int j = 1; j < n; j++){
//对于位置[i][j],要么从上面来,要么从左边来
//所以路径和为两者相加
sum[i][j] = sum[i-1][j] + sum[i][j-1];
}
}
return sum[m-1][n-1];
}
}
return sum[m-1][n-1]是因为m,n从0开始算的,所以最后一行为[m-1]最后一列为[n-1]