我正在嘗試將下面的算法從遞歸更改爲迭代,並且遇到問題。 (圖書:「破譯編碼訪談」)遞歸爬樓梯算法
問題:「一個孩子正在跑步樓梯,有n個步驟,一次可以跳1,2或3步。孩子可以通過很多方式跑上樓梯。「
本書的答案(遞歸):
public static int countWays(int n, int[] map) {
if (n < 0)
return 0;
if (n == 0)
return 1;
if (map[n] > -1)
return map[n];
map[n] = countWays(n - 1, map) + countWays(n - 2, map) + countWays(n - 3, map);
return map[n];
}
我的回答(迭代):我與我給出的答案有
public static int countWays(int n, int[] map) {
for (int i = 1; i <= n; i++) {
//Problem with writing it this way: index could be negative
map[i] = map[i - 1] + map[i - 2] + map[i - 3];
}
return map[n];
}
的一個問題是該行「地圖[我 - 1] + map [i - 2] + map [i - 3]「可能會導致負指數,這會導致錯誤。
我的代碼可能存在其他問題。
有人可以幫忙寫這個嗎?
對於Python中的迭代O(n)和O(log(n))解決方案,請參見[本答案](https://stackoverflow.com/a/40920969/832230)。 –