// 经典dp, dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
// 注意边界 dp[1][1..n] = dp[1...n][1] = 1;
// 因为只能向右和向下走
// 但是数据应该没这么强,试了下100,100都超long了...
class Solution {
public int uniquePaths(int m, int n) {
long[][] dp = new long[m + 1][n + 1];
for (int i = 0; i <= m; i ++){
for (int j = 0; j <= n; j ++){
dp[i][j] = 0;
}
}
for (int i = 1;i <= m; i++){
dp[i][1] = 1;
}
for (int j = 0; j <= n; j ++){
dp[1][j] = 1;
}
for (int i = 2; i <= m; i ++){
for (int j = 2;j <= n; j++){
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
// print(dp);
return (int)dp[m][n];
}
// public void print(long[][] ans) {
// for (int i = 0;i < ans.length; i++){
// for (int j = 0;j < ans[i].length; j++){
// System.out.printf("%d ", ans[i][j]);
// }
// System.out.println();
// }
// }
}
// c++ 版本
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int> > dp(m + 1, vector<int>(n + 1));
dp[1][1] = 1;
for (int i = 1;i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (i == 1 && j == 1)
continue;
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[m][n];
}
};
LeetCode 62 不同路径
于 2019-08-24 15:55:44 首次发布