有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。
机器人
每一时刻
只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为
'Finish'
)。
问有多少条不同的路径?
样例
1,1 | 1,2 | 1,3 | 1,4 | 1,5 | 1,6 | 1,7 |
2,1 | | | | | | |
3,1 | | | | | | 3,7 |
以上3 x 7的网格中,有多少条不同的路径?
注意
n和m均不超过100
************************************
进行数学分析,需要向下走m-1步,向右走n-1步,一共是m+n-2步,所以一共有Cm+n-2m-1
种走法;
我们求的是到右下角的路径有多少个,设A[m-1][n-1]就是到该点的路径和,则其路径和等于到临近右侧m-1,n-2的路径和A[m-1][n-2] + 临近上侧m-2,n-1的路径和A[m-2][n-1],
写成通项的形式:A[i][j] = A[i][j-1] + A[i-1][j]
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 arr[][] = new int[m][n];
for(int i=0;i<m;i++)
arr[i][0] = 1;
for(int i=0;i<n;i++)
arr[0][i] = 1;
for(int i=1;i<m;i++){
for(int j=1;j<n;j++)
arr[i][j] = arr[i][j-1] + arr[i-1][j];
}
return arr[m-1][n-1];
}
}