Java 我的eulerProject函数中的错误结果
我试图找到15号欧拉问题的解决方案。 (查找从栅格左上角到右下角的路径数) 第一次尝试没有成功,因为我将所有可能的组合都存储在一个列表中,结果导致了堆问题(这是可以预测的,不是吗) 在第二次尝试中,我决定计算网格中每个点存在多少种可能的方式。 例如,(0,0)有一个唯一的访问方式,(1,1)有两个(通过(0,1)和另一个通过(1,0))。对于每一点,我们总结前面两点的可能方式。 由于这似乎是一个很好的解决方案,没有太多的内存问题,我仍然没有得到正确的答案,你能告诉我错误的来源吗(因为我假设我犯了一个错误,而不是很明显) SNA功能化源代码:Java 我的eulerProject函数中的错误结果,java,algorithm,Java,Algorithm,我试图找到15号欧拉问题的解决方案。 (查找从栅格左上角到右下角的路径数) 第一次尝试没有成功,因为我将所有可能的组合都存储在一个列表中,结果导致了堆问题(这是可以预测的,不是吗) 在第二次尝试中,我决定计算网格中每个点存在多少种可能的方式。 例如,(0,0)有一个唯一的访问方式,(1,1)有两个(通过(0,1)和另一个通过(1,0))。对于每一点,我们总结前面两点的可能方式。 由于这似乎是一个很好的解决方案,没有太多的内存问题,我仍然没有得到正确的答案,你能告诉我错误的来源吗(因为我假设我犯了
@Test
public void testFoo() {
long[][] grid = new long[20][20];
for(int i=0; i<20; i++){
grid[0][i]=1;
grid[i][0] =1;
}
int steps=1;
while(steps<21){
for(int i=steps; i<20; i++){
grid[i][steps]= grid[i-1][steps]+grid[i][steps-1];
grid[steps][i]= grid[i-1][steps]+grid[i][steps-1];
}
steps++;
}
System.out.println(grid[19][19]); //35345263800
}
@测试
公共void testFoo(){
长[][]网格=新长[20][20];
对于2×2
网格中的(int i=0;i),存在3×3
交点,因此需要3×3
数组
0 1 2
0 ┌─┬─┐
1 ├─┼─┤
2 └─┴─┘
0 1 2
0┌─┬─┐
1.├─┼─┤
2.└─┴─┘
因此,对于20×20
网格,需要21×21
数组
0 1 2
0 ┌─┬─┐
1 ├─┼─┤
2 └─┴─┘
另一种解决方案:在数学中使用组合,答案是。在2×2
网格中,存在3×3
交点,因此需要3×3
数组
0 1 2
0 ┌─┬─┐
1 ├─┼─┤
2 └─┴─┘
0 1 2
0┌─┬─┐
1.├─┼─┤
2.└─┴─┘
因此,对于20×20
网格,需要21×21
数组
0 1 2
0 ┌─┬─┐
1 ├─┼─┤
2 └─┴─┘
另一个解决方案:在数学中使用组合,答案是。从i=steps
开始意味着你总是有i>=steps
,这意味着你只看正方形的右上半部分。为什么不先把重点放在2x2情况下的正确答案上呢?@Teepeemm(2.2)数字看起来很精确(等于2),网格(3,3)=6.在我的循环中,对于步骤=n,我已经用iYou计算了网格的每个部分。johnchen902注意到了哪里出了问题。事实上,你在19x19网格上有正确的答案。@Teepeemm我真诚的道歉,我不明白你的意思。对于2x2的情况,答案是绝对错误的,因为我需要一个3x3网格。谢谢你的提示!!从i=steps
开始意味着你总是有i>=steps
,这意味着你只看正方形的右上半部分。为什么不先把重点放在2x2案例的正确答案上?@Teepeemm(2.2)数字看起来精确(等于2),网格(3,3)=6.在我的循环中,对于步骤=n,我已经用iYou计算了网格的每个部分。johnchen902注意到了哪里出了问题。事实上,你在19x19网格上有正确的答案。@Teepeemm我真诚的道歉,我不明白你的意思。对于2x2的情况,答案是绝对错误的,因为我需要一个3x3网格。谢谢你的提示!!哇。这就是它显然失败的原因。非常感谢!!哇。这就是它显然失败的原因。非常感谢!!