我正在尝试解决“动态问题”问题,以找到原点和电路板最后一个单元之间的唯一路径。问题在https://leetcode.com/problems/unique-paths/的leetcode上出现。
问题陈述是-
机器人位于m x n网格的左上角(在下图中标记为“开始”)。
机器人只能在任何时间点上下移动。机器人试图到达网格的右下角(在下图中标记为“完成”)。
有多少个可能的唯一路径?
我被困在一个m = 23且n = 12的测试用例上。您能解释一下我代码中的不一致之处吗?
public int uniquePaths(int m, int n) {
return getPath(m,n,1,1);
}
HashMap<String,Integer> map = new HashMap<>();
private int getPath(int m, int n, int x, int y){
if(x == n && y == m) return 1;
else if(x > n || y > m) return 0;
String s = ""+x+y;
if(map.get(s) != null) return map.get(s);
int max =0;
if(x < n)
max = max + getPath(m,n,x+1,y);
if(y < m)
max = max + getPath(m,n,x,y+1);
map.put(s,max);
return max;
}
}
在m = 23和n = 12时,我得到192184665作为输出,而193536720是预期结果。
答案 0 :(得分:1)
调查我的评论。您可以使用自底向上的dp在Sigma(m * n)中解决此问题。
创建一个大小为[m * n]的int
矩阵。
int[] a = new int[n][m];
for (int i = 0; i < n-1; ++i) {
a[i][m-1] = 1;
}
for (int j = 0; i < m-1; ++j) {
a[n-1][j] = 1;
}
for (int i = n-2; i >= 0; --i) {
for (int j = m-2; j >= 0; --j) {
a[i][j] = a[i+1][j] + a[i][j+1];
}
}
System.out.print(a[0][0]);