解答
动态规划
#include <vector>
using namespace std;
class Solution {
public:
int uniquePaths(int m, int n) {
// 设置二维数组 dp 用来储存到达每个位置时不同路径的数量
// dp[0][0] 表示从第 0 行第 0 列到达第 0 行第 0 列时不同路径的数量
// dp[0][i] 表示从第 0 行第 0 列到达第 0 行第 i 列时不同路径的数量
// dp[j][0] 表示从第 0 行第 0 列到达第 j 行第 0 列时不同路径的数量
// dp[i][j] 表示从第 0 行第 0 列到达第 i 行第 j 列时不同路径的数量
vector<vector<int>> dp(m,vector<int>(n));
// 初始化 dp[0][0],
// dp[0][0] 表示从第 0 行第 0 列到达第 0 行第 0 列时不同路径的数量
// 仅此一条,别无分路
dp[0][0] = 1;
// i 从 1 遍历到 m - 1
// 获取从第 0 行第 0 列到达第 j 行第 0 列时不同路径的数量
// 由于每次只能向下或者向右移动一步,此时只能向下移动一步
// 所以,只能一直向下走,只有这一条路径
for (int i = 1; i < m; i++)
{
dp[i][0] = 1;
}
// j 从 1 遍历到 n - 1
// 获取从第 0 行第 0 列到达第 0 行第 i 列时不同路径的数量
// 由于每次只能向下或者向右移动一步,此时只能向右移动一步
// 所以,只能一直向右走,只有这一条路径
for (int j = 1; j < n; j++)
{
dp[0][j] = 1;
}
// 接下来从第 1 行到第 m - 1 行
// 从第 1 列到 n - 1 列
// 填充二维数组 dp 里面的值
// dp[i][j] 表示从第 0 行第 0 列到达第 i 行第 j 列时不同路径的数量
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];
}
}
// dp[ m - 1][ n - 1 ] 表示从第 0 行第 0 列到达第 m - 1 行第 n - 1 列时不同路径的数量
// 即到达终点的数量
// 返回这个结果即可
return dp[m-1][n-1];
}
};