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

  • 相关阅读:
    04邻接表深度和广度遍历DFS_BFS
    03邻接矩阵的深度和广度遍历的C语言实现
    02邻接表创建的C语言实现
    01邻接矩阵的创建C语言实现
    GUN的相关使用
    JAVA学习笔记
    排序的C语言实现
    线索二叉树的C语言实现
    maven配置logback
    多线程概念
  • 原文地址:https://www.cnblogs.com/dwwzone/p/12821560.html
Copyright © 2011-2022 走看看