zoukankan      html  css  js  c++  java
  • 常见面试题--爬楼梯 斐波那契数列的应用

    有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶,问小孩有多少种走法可以上去,类似的问题很多。

    典型的动态规划问题

    设到达第 i 阶台阶有f(i)种走法

    我们可以轻易的发现 当阶梯数 n = 1 时,f(1) = 1;

                  n = 2时,f(2) = 2;

                  n = 3时,f(n) = 4;

    当n>=4时,假设小孩当前处于第 i 阶,那么他的前一步有3种可能:

      1.在 i-1 阶上1阶到达第 i 阶

      2.在 i-2 阶上2阶到达第 i 阶

      3.在 i-3 阶上3阶到达第 i 阶

    那么到达第 i 阶走法总和 = 到达i-1阶的走法 + 到达i-2阶的走法+到达i-3阶的走法 

    即 f(i) = f(i-1) + f(i-2) + f(i-3)

    代码:

    public int waysToStep(int n) {
            long first = 1;
            long second = 2;
            long third = 4;
            if (n < 3)
                return n;
            if (n == 3)
                return 4;
            long res = 0;
            for (int i = 4; i <= n; i++) {
                res = first + second + third;
                first = second;
                second = third;
                third = res;
            }
            return res;
        }

    代码思路和斐波那契相差无几,当n交大的时候,注意是否整数溢出,及时采取模数或者将int改为long

  • 相关阅读:
    Prometheus服务发现
    持久化查询
    PromQL进阶
    PromQL基础
    Prometheus概述
    监控系统概念
    zabbix5x解决中文字体问题
    allure 插件新手 demo
    关于时间复杂度~
    IIS发布网站Microsoft JET Database Engine 错误 '80004005'的解决办法,基于Access数据库
  • 原文地址:https://www.cnblogs.com/dwwzone/p/12821560.html
Copyright © 2011-2022 走看看