• Fibonacci数列




    解题思路:

      第一步:了解问题的数据规模

        由题可以看出n的范围比较大,Fn的范围也很大,所以我们的数据类型尽量考虑long型,同时也排除用递归的解法,因为递归的解法时间复杂度比较高

      第二步:选择合适的解法

        解法1:开辟数组的解法(具体思路在代码中呈现)

        解法2:滚动数组的解法(具体思路在代码中呈现)

        这里我优先考虑用滚动数组的解法,因为时间复杂度O(n)级别,空间复杂度为O(1)级别,即能节省空间,又能节省时间

    代码实现:

      

    //开辟数组的方式
        public static  long  fib1 (int n){
          //由于是从1开始而且还要最少存储3个元素因此数组长度为n+2.
          long[] fibs = new long[n+2];
          fibs[0] = 0;
          fibs[1] = 1;
          fibs[2] = 1;
          // 从第三个开始遍历, fibs[0] = 0;用不到
          for (int i = 3; i <=n; i++) {
              // 只存储余数即可
              fibs[i] = (fibs[i-1] + fibs[i-2]) % 10007;
          }
          return fibs[n];
        }
      //滚动数组的方式
        public static long fib2(int n){
            //创建一个长度为3的滚动数组,并进行初始化
            long[] fibs ={0,1,1};
            //由于n=1时和n=2时不用进行滚动,所以直接返回就行
            if(n==1||n==2)  return 1;
            //由于第1次滚动会得出n=3的fib数,第2次滚动会得出n=4的fib数,所以第n-2次滚动会得出n的fib数
            for(int i=1;i<=n-2;i++){
                fibs[0]=fibs[1];
                fibs[1]=fibs[2];
                fibs[2]=(fibs[0]+fibs[1])%10007;  //根据题意,只存储余数即可
            }
            return fibs[2];
        }

     2020-03-27

  • 相关阅读:
    获取用户电脑的上网IP地址
    array_multisort() 排序说明
    phpcms2008 sp4 升级到v9
    js验证
    鼠标滑过出现气泡提示框
    鼠标滑过右侧显示菜单
    tab切换
    分享到新浪,人人,开心,天涯,豆瓣,搜狐,腾讯等的代码
    判断checkbox是否被选中,判定选中的个数!
    <object >属性
  • 原文地址:https://www.cnblogs.com/songchengyu/p/12582756.html
Copyright © 2020-2023  润新知