我正在尝试将下面的算法从递归更改为迭代,并且遇到问题。 (图书:“破译编码访谈”)递归爬楼梯算法
问题:“一个孩子正在跑步楼梯,有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]“可能会导致负指数,这会导致错误。
我的代码可能存在其他问题。
有人可以帮忙写这个吗?
+0
对于Python中的迭代O(n)和O(log(n))解决方案,请参见[本答案](https://stackoverflow.com/a/40920969/832230)。 –