JAVA练习354- 不同路径

发布时间:2026/7/25 17:26:53
JAVA练习354- 不同路径 题目概览一个机器人位于一个m x n网格的左上角 起始点在下图中标记为 “Start” 。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角在下图中标记为 “Finish” 。问总共有多少条不同的路径示例 1输入m 3, n 7输出28示例 2输入m 3, n 2输出3解释从左上角开始总共有 3 条路径可以到达右下角。 1. 向右 - 向下 - 向下 2. 向下 - 向下 - 向右 3. 向下 - 向右 - 向下示例 3输入m 7, n 3输出28示例 4输入m 3, n 3输出6提示1 m, n 100题目数据保证答案小于等于2 * 10^9来源62. 不同路径 - 力扣LeetCode解题分析方法一动态规划当前位置只能从上面或左边走过来因此可以得到状态转移方程dp[ i ] [ j ] dp [ i - 1 ] [ j ] dp [ i ] [ j - 1 ]第一行和第一列只有一条路径所以初始化为 1。时间复杂度O(mn)空间复杂度O(mn)class Solution { public int uniquePaths(int m, int n) { int[][] dp new int[m][n]; for (int i 0; i m; i) { dp[i][0] 1; } for (int j 0; j n; j) { dp[0][j] 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]; } }方法二动态规划优化由于我们只关注上一行和上一列的路径数因此我们可以将二维dp优化为一维只存储上一行的路径数每次遍历将当前列位置数更新为新一行的数据获取前一列的数据就为 dp[ j - 1]时间复杂度O(mn)空间复杂度O(n)class Solution { public int uniquePaths(int m, int n) { int[] dp new int[n]; for (int j 0; j n; j) { dp[j] 1; } for (int i 1; i m; i) { for (int j 1; j n; j) { dp[j] dp[j-1]; } } return dp[n-1]; } }