【发布时间】:2019-09-17 23:59:41
【问题描述】:
我正在通过this leetcode problem for going from top left to bottom right.
有多少种可能的独特路径?
通过存储每个索引的结果,我能够理解这种动态编程方法。
public int uniquePaths(int m, int n) {
int count[][] = new int[m][n];
for (int i = 0; i < m; i++)
count[i][0] = 1;
for (int j = 0; j < n; j++)
count[0][j] = 1;
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
count[i][j] = count[i-1][j] + count[i][j-1]; //+ count[i-1][j-1];
}
}
return count[m-1][n-1];
// if (m == 1 || n == 1) return 1;
// return uniquePaths(m-1, n) + uniquePaths(m, n-1);
}
但是,我发现了这个我无法理解的解决方案。
public int uniquePaths(int m, int n) {
int[] dp = new int[n];
dp[0] = 1;
for (int i = 0; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[j] += dp[j - 1];
}
}
return dp[n - 1];
}
有人可以解释第二个解决方案吗?
【问题讨论】:
-
unique 路径是什么意思? 最短路径?还是所有可能的路径?对于最短路径,金额为
m * n - 1
标签: java algorithm recursion dynamic-programming