【发布时间】:2013-07-20 16:47:13
【问题描述】:
一个人正在跑上 n 级楼梯,一次可以走 1 级、2 级或 3 级。现在编写一个程序来计算孩子可以用多少种可能的方式跑楼梯。
给出的代码如下所示
public static int countDP(int n, int[] map) {
if (n<0)
return 0;
else if (n==0)
return 1;
else if (map[n]>-1)
return map[n];
else {
map[n] = countDP(n-1, map) + countDP(n-2, map) + countDP(n-3, map);
return map[n]; }
}
我知道 C 和 C++,而不是 JAVA。 这是来自Cracking the Coding 采访书。 谁能解释一下
她为什么以及如何在这里使用函数映射?这里的map是数组吧?
我没有看到任何将输入保存到地图数组的行,但它如何返回?
有人知道这段代码的 C++ 或 C 版本吗?很难理解这段代码。可能不是因为JAVA语法,而是动态规划的隐式结构。
这个算法的时间复杂度是多少?它应该小于 O(3^n) ?
我将不胜感激。
谢谢各位
【问题讨论】:
-
我会尽力解决(神秘的)问题:1. map 是一个
int数组。 2. 它必须是在外部定义的,即不在这个例子中,并且必须包含 n+1 个元素 3. 不,如果你想回答这个问题,你必须将C和C++添加到标签 4. ...
标签: java algorithm recursion time-complexity dynamic-programming