中等
不同路径
动态规划网格
相关算法文章:
题目描述
一个机器人位于网格左上角,目标是到达右下角。它每次只能向下或向右移动。请返回不同的路径数量。
解题思路
使用动态规划,dp[i][j] 表示到达当前位置的路径数,转移方程为 dp[i][j] = dp[i - 1][j] + dp[i][j - 1]。
示例输入/输出
输入: m = 3, n = 7
输出: 28
代码示例
function uniquePaths(m, n) {
const dp = Array.from({ length: m }, () => Array(n).fill(1));
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[m - 1][n - 1];
}
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];
}
}
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m, vector<int>(n, 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];
}
};
def unique_paths(m, n):
dp = [[1] * n for _ in range(m)]
for i in range(1, m):
for j in range(1, n):
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
return dp[m - 1][n - 1]
示例输入 / 输出
下面给出一组输入输出示例,便于对照题意与结果。
编号 unique-paths难度 中等
输入
m = 3, n = 7
输出
28