• 剑指offer--斐波那契数列


    问题描述

       大家都知道斐波那契数列[   f(n)=0,n=0;f(n)=1,n=1;f(n)=f(n-1)+f(n-2),n>1   ],现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

    解题思路

       看到这道题的第一眼,往往想到的是用递归算法去解,但是递归算法是非常慢的,因为重复的计算太多。以求f(10)为例,下图是用树表示的依赖关系,树中很多结点是重复的,而且重复的结点数会随着n的增大而急剧增加。

        方法:从下往上计算,首先根据f(1)和f(0)计算出f(2),再根据f(2)和f(1)计算出f(3)......以此类推便可计算出第n项。这种算法的时间复杂度是O(n)

    代码

    public class Solution {
        public int Fibonacci(int n) {
            if(n<2)
                return n;
            int fibNMinusOne = 0;
            int fibNMinusTwo =1;
            int fibN = 0;
            for(int i=2;i<=n;i++){
                fibN = fibNMinusOne+fibNMinusTwo;
                fibNMinusOne = fibNMinusTwo;
                fibNMinusTwo = fibN;
            }
            return fibN;
        }
    }
  • 相关阅读:
    Linux date自己实现代码
    Linux常用指令
    awk getline命令
    文档资料记录
    数学之美番外篇:平凡而又神奇的贝叶斯方法
    最小二乘法(ZZ)
    SpringMVC简单使用教程
    Oracle设置序列方法
    Bootstrap Table的使用详解
    Html中div块居中显示
  • 原文地址:https://www.cnblogs.com/xiaoxli/p/9410397.html
Copyright © 2020-2023  润新知