zoukankan      html  css  js  c++  java
  • 猴子爬山


    /**
    * 猴子爬山问题:一个猴子在一座有台阶的山上爬山跳跃,猴子上山一步可跳1级或跳3级,试求猴子上山有多少种不同的跳法(假设台阶不超过50阶)
    * <p>
    * 注:一般台阶数不允许太高,因为有可能超过固定类型数字的表示范围
    */
    public class ClimbMountains {

    public static void main(String[] args) {
    // 台阶阶数
    int top = 30;

    // 初始化数组,+4防止下标越界,使用long类型可以使台阶数稍微高一些
    long[] arr = new long[top + 4];

    // 爬山有多少种方法
    long ways = process(0, top, arr);
    System.out.println(ways);
    }

    /**
    * 猴子爬山有多少种方法
    *
    * @param step 猴子当前在哪一级台阶
    * @param top 台阶顶部
    * @param arr 当前最高top阶的情况下,在step阶的不同跳法总数
    * @return 多少种方法
    */
    private static long process(int step, int top, long[] arr) {
    // 登顶 算一种跳法
    if (step == top) {
    return 1;
    }
    // 超过了顶部,不算
    if (step > top) {
    return 0;
    }
    // 下一步跳1阶 的方法数
    int up1 = step + 1;
    if (arr[up1] == 0) {
    arr[up1] = process(up1, top, arr);
    }
    // 下一步跳3阶 的方法数
    int up3 = step + 3;
    if (arr[up3] == 0) {
    arr[up3] = process(up3, top, arr);
    }
    // 下一步的方法总数
    return arr[up1] + arr[up3];
    }

    }

    /* 如有意见或建议,欢迎评论区留言;如发现代码有误,欢迎批评指正 */
  • 相关阅读:
    java并发:简单面试问题集锦
    Java:泛型
    Java:注解(元数据)
    Java:反射
    Java:静态代理 and 动态代理
    华为机试题——该警醒了,骚年
    java并发:线程同步机制之Lock
    java并发:中断一个正在运行的线程
    java中String类型变量的赋值问题
    java中的自增问题
  • 原文地址:https://www.cnblogs.com/laydown/p/13216444.html
Copyright © 2011-2022 走看看