剑指 Offer 10- I. 斐波那契数列
📆Date: 2023年3月13日
✒️Author: SmartBoy
📓Classify:LeetCode
🔖Language: Java
✨题目描述:
- 写一个函数,输入
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
提示:
0 <= n <= 100
🎉解题思路:
同爬楼梯题目思路一样
均可利用递归和循环的思路解决。
🥇Java源码:
package LeetCodePro.Problem2; import java.util.Scanner; /** * @Auther:Xust_SmartBoy * @Date:2023/3/13 20:01 * @Description:LeetCodePro.Problem2 * @User:SmartBoy * @VERSON: * 写一个函数,输入 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 */ public class Problem2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入n的值:"); int n = scanner.nextInt(); Solution1 solution1 = new Solution1(); Solution2 solution2 = new Solution2(); Solution3 solution3 = new Solution3(); // System.out.println("F(N) =" + solution1.fib(n)); // System.out.println("F(N) =" + solution2.fib(n)); System.out.println("F(N) =" + solution3.fib(n)); } }
package LeetCodePro.Problem2; /** * @Auther:Xust_SmartBoy * @Date:2023/3/13 20:01 * @Description:LeetCodePro.Problem2 * @User:SmartBoy * @VERSON: */ public class Solution1 { public int fib(int n) { if (n == 0){ return 0; } if (n == 1) return 1; return fib(n - 1) + fib(n - 2); } }
package LeetCodePro.Problem2; import java.util.HashMap; import java.util.Map; /** * @Auther:Xust_SmartBoy * @Date:2023/3/13 20:05 * @Description:LeetCodePro.Problem2 * @User:SmartBoy * @VERSON:递归 */ public class Solution2 { private Map<Integer,Integer> map = new HashMap<>(); public int fib(int n){ if (n == 0) return 0; if (n == 1){ return 1; } if (map.get(n) != null){ return map.get(n) % 1000000007; } else { map.put(n,fib(n -2)+ fib(n -1)); return map.get(n) % 1000000007; } } }
package LeetCodePro.Problem2; /** * @Auther:Xust_SmartBoy * @Date:2023/3/13 20:18 * @Description:LeetCodePro.Problem2 * @User:SmartBoy * @VERSON:循环 */ public class Solution3 { public int fib(int n){ if (n == 0) return 0; if (n == 1) return 1; int result = 0; int pre = 1; int prePre = 0; for (int i = 2; i <= n ; i++) { result = pre + prePre; prePre = pre % 1000000007; pre = result % 1000000007; } return result % 1000000007; } }