N楼梯步骤

时间:2017-07-19 15:11:15

标签: algorithm recursion data-structures

  

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];
}

1 个答案:

答案 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语句以使应用程序清晰。