计算从二维数组 (0,0)->(m-1,n-1) 路径数量
思考:最初考虑使用dfs解决,这题不适合使用dfs, 而且会超时。正确解法使用动态规划解决。看到下面的递推公式也就明白了。
方法1:使用二维的数组存放当前的路径数量。
int uniquePaths(int m, int n) {
vector<vector<int>> paths(m, vector<int>(n, 1));
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
paths[i][j] = paths[i - 1][j] + paths[i][j - 1];
}
}
return paths[m - 1][n - 1];
}
方法2:是对方法1的优化,改为一维数组存放当前的路径数量。
int uniquePaths(int m, int n) {
vector<int> dp(n, 1);
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
dp[j] += dp[j - 1];
}
}
return dp[n - 1];
}