- 题目描述
一个机器人位于一个 m x n 网格的左上角。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径?
来源:LeetCode
- 示例
- 示例 1:
输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角:①向右 -> 向右 -> 向下;②向右 -> 向下 -> 向右;③向下 -> 向右 -> 向右 - 示例 2:
输入: m = 7, n = 3
输出: 28
- 思路分析
采用动态规划思想。定义 p a t h s [ i ] [ j ] paths[i][j] paths[i][j],表示当走到第 i i i行第 j j j列时一共有多少条路径。因为题目规定只能向下或者向右,因此为了走到 ( i , j ) (i,j) (i,j),有两种可能:①从 ( i − 1 , j ) (i-1,j) (i−1,j)向下走了一步;②从 ( i , j − 1 ) (i,j-1) (i,j−1)向右走了一步。因此得出状态转换式: p a t h s [ i ] [ j ] = p a t h s [ i − 1 ] [ j ] + p a t h s [ i ] [ j − 1 ] paths[i][j] = paths[i-1][j] + paths[i][j-1] paths[i][j]=paths[i−1][j]+paths[i][j−1]
- JAVA实现
class UniquePaths {
public int uniquePaths(int m, int n) {
if(m==0 || n==0) return 0;
int[][] paths = new int[m][n];
for(int i=0; i<m; i++) paths[i][0] = 1; //base case
for(int j=0; j<n; j++) paths[0][j] = 1; //base case
for(int i=1; i<m; i++) {
for(int j=1; j<n; j++) {
paths[i][j] = paths[i-1][j] + paths[i][j-1];
}
}
return paths[m-1][n-1];
}
}