LeetCode------斐波那契数列(2)

简介: 这篇文章提供了解决LeetCode上"斐波那契数列"问题的两种方法:一种是使用备忘录模式通过递归计算并存储结果以避免重复计算,另一种是自底向上的迭代方法,同时要求结果对1e9+7取模。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:

F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:1

示例 2:

输入:n = 5
输出:5

第一种解法:
将每次计算出来的结果存入hashmap中

class Solution {
    private Map<Integer,Integer> storgefib =new HashMap<>();

    public int fib(int n) {
        if(n == 0) return 0;
        if(n == 1) return 1;
        if(null != storgefib.get(n)){
            return storgefib.get(n);
        }else{
            int result = (fib(n-1)+fib(n-2))%1000000007;
            storgefib.put(n,result);
            return result;
        }


    }
}

在这里插入图片描述
第二种方式,从底部向上。使用循环求解

class Solution {

    public int fib(int n){
            int result = 0;
            int pre = 1;
            int prePre =0;

        if(n == 0) return 0;
        if(n == 1) return 1;
        if(n >= 2){

            for(int i = 2;i <= n; i++){
                result = (pre+prePre)%1000000007;
                prePre = pre;
                pre = result;
            }
        }
        return result;
    }
}

在这里插入图片描述

解答过程同爬楼梯:具体参考这里:https://blog.csdn.net/weixin_43304253/article/details/122269352

相关文章
|
2月前
Leetcode第38题(外观数列)
LeetCode第38题要求生成外观数列的第n项,该数列从数字1开始,每一项都是对前一项的描述,例如第1项是"1",第2项是"11",第3项是"21",以此类推。
28 0
|
7月前
leetcode-38:外观数列
leetcode-38:外观数列
41 0
|
算法 安全 Swift
LeetCode - #38 外观数列
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode - #38 外观数列
【leetcode每日一题】1027. 最长等差数列
【leetcode每日一题】1027. 最长等差数列
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
|
Java C语言
LeetCode刷题计划——单调数列
LeetCode刷题计划——单调数列
|
存储 Python
LeetCode 38. 外观数列
给定一个正整数 n ,输出外观数列的第 n 项。
97 0
LeetCode 1502. 判断能否形成等差数列
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
104 0
LeetCode 665.非递减数列
LeetCode 665.非递减数列
103 0
LeetCode 665.非递减数列
|
算法
LeetCode 38外观数列&39组合总和
给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。
105 0
LeetCode 38外观数列&39组合总和