题目
机器人在 大小的地图的左上角(起点),每次可以向下或向右移动。要到达地图的右下角(终点)。
可以有多少种不同的路径从起点走到终点?
要求:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度
示例 1:
输入:m = 3, n = 7 输出:28
解题思路:动态规划
👉 定义: 表示到达坐标
的路径数量 。
复杂度分析
时间复杂度:,其中
为数组的行数,其中
为数组列数 。
空间复杂度:,其中
为数组的行数,其中
为数组列数 。
官方代码
public int uniquePaths (int m, int n) {// 定义dp数组int[][] dp = new int[m][n];for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){// 当 i = 0:dp[0][j] = dp[0][j-1]if(i == 0){dp[i][j] = 1; // 都是1是因为dp[0][j] = dp[0][j-1],所以干脆全部赋值为1continue;}// 当 j = 0:dp[i][0] = dp[i-1][0]if(j == 0){dp[i][j] = 1;continue;}// 当 i > 1 && j > 1 : dp[i][j] = dp[i][j-1] + dp[i-1][j]dp[i][j] = dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1]; // 返回到达终点的所有可行路径}
