• 斐波那契数列,跳台阶(dp思想)


    一 . 斐波那契数列:1,1,2,3,5,8,13,21

    即后一项是前两项的和。

    class Solution {
    private:
        int arry[50];
    public:
        Solution() {
            memset(arry, 0, sizeof(0));
            arry[1] = arry[2] = 1;
            for(int i = 3; i <= 39; i ++) arry[i] = arry[i - 1] + arry[i - 2];
        }
        int Fibonacci(int n) {
            return arry[n];
        }
    };

    递归方式:

    int Fibonacci(int n)
    {
        if(n == 1 || n == 2 )
            return 1;
        else
            return Fibonacci(n-1)+Fibonacci(n-2);
    }

    二 . 跳台阶:

      问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    青蛙的最后一步可能是1个台阶,也可能是两个台阶。所以F(n) = F(n-1) + F(n-2);

        int jumpFloor(int number) {
            int arry[number + 5];
            arry[1] = 1; arry[2] = 2;
            for(int i = 3; i <= number; i++) arry[i] = arry[i-1] + arry[i-2];
            return arry[number];
        }

    三 . 变态跳台阶:

    题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
    f(n) = f(0)+f(1)+f(2)+f(3)+......+f(n-1);
       1      1     2      4
    规律为:20+21+.....+2n    结果为 2n+1-1
    所以最终结果为1+2n-1-1 = 2n-1 ;
    其实就是2n-1,下面使用一下前两天学的快速幂
        int jumpFloorII(int number) {
            int n = 1;
            int base = 2;
            number -= 1;
            while(number)
            {
                if(number & 1)
                    n*=base;
                base *= base;
                number>>=1;
            }
            return n;
        }
    求2的n-1次方的简便做法:
    一行代码 return  1<<--number;
  • 相关阅读:
    英特尔®oneAPI简介及动手实验研讨会召集令
    发展壮大:帮助独立游戏开发商解决分销难题
    我们可以从英特尔® SPMD 程序编译器中学到什么?
    2019 Unreal Open Day —— 英特尔携手 UE 助力游戏开发生态建设
    Abp集成Quartz.net记录
    静态和实例初始化映射
    Queryable扩展点
    投影
    空类型映射
    列表和数组
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8621977.html
Copyright © 2020-2023  润新知