【问题标题】:N Staircase stepsN 楼梯台阶
【发布时间】:2017-12-24 23:07:17
【问题描述】:

Bilbo 在他朋友的地方,有 N 步。比尔博,作为 有思想的人,想知道他可以通过多少方式到达 如果他一次走 1 或 2 步,第 N 个楼梯。注意他不能 一次采取超过或等于 2 个连续的 2 步。一种方式 如果他至少接触到第 N 个楼梯,则与另一个不同 一个不同的楼梯。

到目前为止,这是我的代码;我不知道如何不允许连续两次采取 2 步。帮忙?

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

【问题讨论】:

  • 请阅读How to Ask
  • 如果您发布到目前为止的工作并在剩余部分寻求具体帮助,您将获得更好的回应。

标签: algorithm recursion data-structures


【解决方案1】:

我认为您的问题是对连续两步移动的限制。问题要求函数知道一点状态信息:上一步(如果有的话)是两步吗?只需在参数列表中包含一个布尔标志。

int count_path(N, two_step) {
    ...
    count += count_path(N-1, false)
    if not two_step
        count += count_path(N-2, true)

这会打通你的思路吗?

接受后编辑

我添加了if 语句以使应用程序清晰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2015-05-29
    相关资源
    最近更新 更多