LeetCode 062、不同路径
题目
题解
按照动态规划五部曲来分析。
class Solution {
public:
int uniquePaths(int m, int n) {
if (m < 0 || n < 0) return 0;
vector<vector<int>> dp(m, vector<int>(n));
for (int i = 0; i < m; ++i) dp[i][0] = 1; // 从(0, 0) 到 (i, 0)的路径一定只有一条
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];
}
};
- 时间复杂度:O(m * n)
- 空间复杂度:O(m * n)
下面优化一下空间(不太理解),
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> dp(n);
for (int i = 0; i < n; i++) dp[i] = 1;
for (int j = 1; j < m; j++) {
for (int i = 1; i < n; i++) {
dp[i] += dp[i - 1];
}
}
return dp[n - 1];
}
};