剑指 Offer 10- I. 斐波那契数列

image.png
剑指 Offer 10- I. 斐波那契数列 - 图2

图片转自 https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/50fji7/

递归

  1. class Solution {
  2. // 用于缓存计算结果,防止重复计算
  3. int[] catchs = new int[100];
  4. public int fib(int n) {
  5. // 递归终止条件
  6. if (n <= 1) {
  7. return n;
  8. }
  9. // 先判断缓存是否存在,如果没有不存在再递归计算
  10. if (catchs[n - 1] < 1) {
  11. catchs[n - 1] = fib(n - 1);
  12. }
  13. if (catchs[n - 2] < 1) {
  14. catchs[n - 2] = fib(n - 2);
  15. }
  16. // 直接拿缓存结果相加,题目还要求取模再返回
  17. return (catchs[n - 1] + catchs[n - 2]) % 1000000007;
  18. }
  19. }

遍历

  1. class Solution {
  2. public int fib(int n) {
  3. // 定义 n = 0 与 n = 1 的结果
  4. int a = 0, b = 1, res = 0;
  5. for (int i = 0; i < n - 1; i ++) {
  6. res = (a + b) % 1000000007;
  7. a = b;
  8. b = res;
  9. }
  10. return res;
  11. }
  12. }