【问题描述】

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

【解答思路】

1.递归(面试避免) O(n^2)

public class Solution {public int Fibonacci(int n) {if (n == 0) return 0;if (n == 1) return 1;return Fibonacci(n - 1) + Fibonacci(n - 2);}
}
2.一般循环 O(n) 空间复杂度:O(n)
public class Solution {public int Fibonacci(int n) {int ans[] = new int[40];ans[0] = 0;ans[1] = 1;for(int i=2;i<=n;i++){ans[i] = ans[i-1] + ans[i-2];}return ans[n];}
}
3.循环优化 O(n) 空间复杂度:O(1)

0 1 1 2 3 5 8
f(6) = f(5) + f(4),只需要保存f(5) , f(4) 由f(5) -f(3) 得出
计算8 = 5+3时,只需要保存5, 3由5-2得出


public class Solution {public int Fibonacci(int n) {int a = 0, b = 1;for (int i = 1; i <= n - 2; i++) {a = a + b;b = a - b;}return a;}
}

【总结】

  1. 递归需要定义出口,从传递的参数过渡到出口
  2. 综合考虑时间复杂度和空间复杂度

[剑指offer]面试题第[7]题[JAVA][斐波那契数列][递归]相关推荐

  1. [剑指offer]面试题第[36]题[JAVA][二叉搜索树与双向链表][递归]

    [问题描述][中等] [解答思路] 中序遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {Node pre, head;public Node treeToDoubly ...

  2. [剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]

    [问题描述][中等] [解答思路] 1. 暴力 复杂度分析 class MaxQueue {Queue<Integer> queue = new LinkedList();int maxV ...

  3. [剑指offer]面试题第[47]题[JAVA][礼物的最大价值][动态规划]

    [问题描述][中等] [解答思路] 1动态规划 动态规划流程 第 1 步:设计状态 f(i, j)f(i,j) 为从棋盘左上角走至单元格 (i ,j)(i,j) 的礼物最大累计价值 第 2 步:状态转 ...

  4. [剑指offer]面试题第[60]题[JAVA][n个骰子的点数][动态规划][空间优化]

    [问题描述][中等] 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率.你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集 ...

  5. [剑指offer]面试题第[55-1]题[JAVA][二叉树的深度][BFS][DFS]

    [问题描述][简单] 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度.例如:给定二叉树 [3,9,20,null,nul ...

  6. [剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分]

    [问题描述] 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  7. [剑指offer]面试题第[44]题[JAVA][数字序列中某一位的数字][找规律]

    [问题描述][中等] [解答思路] 找规律 时间复杂度:O(logN) 空间复杂度:O(logN) class Solution {public int findNthDigit(int n) {in ...

  8. [剑指offer]面试题第[45]题[JAVA][把数组排成最小的数][快排][ Comparator][PriorityQueue]

    [问题描述][中等] [解答思路] 1. 快速排序 时间复杂度:O(N^2) 空间复杂度:O(1) class Solution {public String minNumber(int[] nums ...

  9. [剑指offer]面试题第[65]题[JAVA][不用加减乘除做加法][位运算]

    [问题描述][简单] [解答思路] 1. 位运算 时间复杂度:O(1) 空间复杂度:O(1) public int add(int a, int b) {while(b != 0) { // 当进位为 ...

最新文章

  1. 数据科学的积累:海平面下的冰山 | 清华信息技术研究院郑方
  2. 操作系统选择成固定模式 HTML5是潜在方向
  3. 威尔士柯基犬,计算机视觉,以及深度学习的力量
  4. Known Notation 39届亚洲赛牡丹江站K题
  5. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用
  6. java 中 针对数组进行的工具类
  7. MySQL高级 - 锁 - MySQL对锁的支持
  8. Azkaban WebApi 调用
  9. JavaScript学习记录总结(十)——几个重要的BOM对象
  10. 图嵌入方法基础学习之Node2vec
  11. 模拟AP与可以访问互联网的网络连接,虚拟出一个“无线路由器”
  12. 人工智能导论测试题——第六章 进化智能与群体智能(2)
  13. 网络运维网管解决方案
  14. day08 系统篇端口扫描CDN服务负载均衡WAF防火墙
  15. 五、Linux系统中的权限管理
  16. xml中foreach循环
  17. 复杂网络基础——《链接》
  18. Nginx无法启动 遇见unknown directive if(!-f in E:\xiangmu\nginx-1.14.0/conf/nginx.conf:28
  19. UE4(虚幻4)基础:光照需要重建
  20. Adobe XD和Sketch,谁才是王者?

热门文章

  1. 使用邮箱注册帐户以及激活
  2. .net core学习
  3. PHP的time函数返回时间不正确
  4. linux命令 scp
  5. AllTray-将办法最小化到琐细托盘
  6. b/s c/s结构的区别!
  7. rails table html,Ruby on Rails:如何将字符串呈现为HTML?
  8. 解决svn:E200030: sqlite[S11]:database disk image is malformed
  9. 支付宝当面付接口如何计算优惠
  10. js 数字千分位展示