我正在尝试找到 euler-problem n°15 的解决方案。 http://projecteuler.net/problem=15 (查找从网格左上角到右下角的路径数)。
第一次尝试没有成功,因为我将所有可能的组合都存储在 List 中,我最终遇到了堆问题(可以预测,不是吗)。
在第二次尝试中,我决定计算网格中每个点存在多少种可能的方式。例如(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
}