Bilbo在他朋友的地方,有N个台阶。 Bilbo,是一个 有思想的人,想知道他能以多少方式达到 N阶楼,如果他一次采取1或2步。请注意,他不能 一次超过或等于2个连续2个步骤。一种方式 如果他至少触及到达第N个楼梯,则与另一个不同 一个不同的楼梯。
到目前为止,这是我的代码;我无法弄清楚如何不允许连续两次采取两步。帮助
public static int fibOptimized(int n) {
int arr[] = new int[n + 1];
for (int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
int output = fibHelper(n, arr);
return output;
}
public static int fibHelper(int n, int[] arr) {
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
if (arr[n] > -1) {
return arr[n];
}
arr[n] = fibHelper(n - 1, arr) + fibHelper(n - 2, arr);
return arr[n];
}
答案 0 :(得分:0)
我认为你的问题是对连续两步动作的约束。问题要求函数知道一位状态信息:前一步(如果有的话)是两步吗?只需在参数列表中包含一个布尔标志。
int count_path(N, two_step) {
...
count += count_path(N-1, false)
if not two_step
count += count_path(N-2, true)
这会阻止你的思路吗?
接受后编辑
我添加了if
语句以使应用程序清晰。