オイラー問題n°15の解決策を見つけようとしています。 http://projecteuler.net/problem=15 (グリッドの左上隅から右下隅までのパスの数を見つけます)。
最初の試行は成功しませんでした。考えられるすべての組み合わせをリストに保存したため、ヒープの問題が発生しました (予測可能ですね)。
2 回目の試行では、グリッド内のすべてのポイントに存在する可能性のあるウェイの数を数えることにしました。たとえば、(0,0) にはアクセスする唯一の方法があり、(1,1) には ((0,1) 経由と (1,0) 経由の) 2 つのアクセス方法があります。すべてのポイントについて、前の 2 つのポイントの可能な方法を合計します。これはメモリの問題があまりない素晴らしい解決策のように見えたので、まだ正しい答えが得られません。間違いの原因のヒントを教えてください (明らかに間違いではなく、間違いを犯したと思います)。
盗まれたソースコード:
@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
}