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

  • 相关阅读:
    关于学习netty的两个完整服务器客户端范例
    android-betterpickers
    ValueBar
    CircleDisplay
    JellyViewPager
    十天学习PHP之第二天
    android-測试so动态库(九)
    实习题
    android 编程小技巧(持续中)
    Codeforces Round #253 (Div. 2)——Borya and Hanabi
  • 原文地址:https://www.cnblogs.com/dwwzone/p/12821560.html
Copyright © 2011-2022 走看看