1.题目描述
一个机器人在m×n大小的地图的左上角(起点)。
机器人每次可以向下或向右移动。机器人要到达地图的右下角(终点)。
可以有多少种不同的路径从起点走到终点?
备注:m和n小于等于100,并保证计算结果在int范围内
数据范围:0<n,m≤1000<n,m≤100,保证计算结果在32位整型范围内
要求:空间复杂度 O(nm)O(nm),时间复杂度 O(nm)O(nm)
进阶:空间复杂度 O(1)O(1),时间复杂度 O(min(n,m))O(min(n,m))
示例1
输入:
2,1返回值:
1示例2
输入:
2,2返回值:
2
2.解题思路
本题的关键是推出递归公式:dp[i][j] = dp[i-1][j] + dp[i][j-1];
即到达当前位置依赖于左边位置或者上边一个位置,那么要求出到达当前位置的方案数,只需要用到当前位置左边一个位置和上边一个位置的方案数做和,即为dp[i][j]的值
注:需要初始化第0行和第0列的值为1,因为到达这些位置只能向下或者向右直走,没有别的方案
3.代码实现
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param m int整型
* @param n int整型
* @return int整型
*/
public int uniquePaths (int m, int n) {
// write code here
int[][] dp = new int[m][n];
//初始化第0行和第0列
for (int j = 0; j < n; j++) {
dp[0][j] = 1;
}
for (int i = 0; i < m; i++) {
dp[i][0] = 1;
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
}