[剑指offer]面试题第[7]题[JAVA][斐波那契数列][递归]
【问题描述】
大家都知道斐波那契数列,现在要求输入一个整数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;}
}
【总结】
- 递归需要定义出口,从传递的参数过渡到出口
- 综合考虑时间复杂度和空间复杂度
[剑指offer]面试题第[7]题[JAVA][斐波那契数列][递归]相关推荐
- [剑指offer]面试题第[36]题[JAVA][二叉搜索树与双向链表][递归]
[问题描述][中等] [解答思路] 中序遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {Node pre, head;public Node treeToDoubly ...
- [剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]
[问题描述][中等] [解答思路] 1. 暴力 复杂度分析 class MaxQueue {Queue<Integer> queue = new LinkedList();int maxV ...
- [剑指offer]面试题第[47]题[JAVA][礼物的最大价值][动态规划]
[问题描述][中等] [解答思路] 1动态规划 动态规划流程 第 1 步:设计状态 f(i, j)f(i,j) 为从棋盘左上角走至单元格 (i ,j)(i,j) 的礼物最大累计价值 第 2 步:状态转 ...
- [剑指offer]面试题第[60]题[JAVA][n个骰子的点数][动态规划][空间优化]
[问题描述][中等] 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率.你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集 ...
- [剑指offer]面试题第[55-1]题[JAVA][二叉树的深度][BFS][DFS]
[问题描述][简单] 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度.例如:给定二叉树 [3,9,20,null,nul ...
- [剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分]
[问题描述] 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- [剑指offer]面试题第[44]题[JAVA][数字序列中某一位的数字][找规律]
[问题描述][中等] [解答思路] 找规律 时间复杂度:O(logN) 空间复杂度:O(logN) class Solution {public int findNthDigit(int n) {in ...
- [剑指offer]面试题第[45]题[JAVA][把数组排成最小的数][快排][ Comparator][PriorityQueue]
[问题描述][中等] [解答思路] 1. 快速排序 时间复杂度:O(N^2) 空间复杂度:O(1) class Solution {public String minNumber(int[] nums ...
- [剑指offer]面试题第[65]题[JAVA][不用加减乘除做加法][位运算]
[问题描述][简单] [解答思路] 1. 位运算 时间复杂度:O(1) 空间复杂度:O(1) public int add(int a, int b) {while(b != 0) { // 当进位为 ...
最新文章
- 数据科学的积累:海平面下的冰山 | 清华信息技术研究院郑方
- 操作系统选择成固定模式 HTML5是潜在方向
- 威尔士柯基犬,计算机视觉,以及深度学习的力量
- Known Notation 39届亚洲赛牡丹江站K题
- 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用
- java 中 针对数组进行的工具类
- MySQL高级 - 锁 - MySQL对锁的支持
- Azkaban WebApi 调用
- JavaScript学习记录总结(十)——几个重要的BOM对象
- 图嵌入方法基础学习之Node2vec
- 模拟AP与可以访问互联网的网络连接,虚拟出一个“无线路由器”
- 人工智能导论测试题——第六章 进化智能与群体智能(2)
- 网络运维网管解决方案
- day08 系统篇端口扫描CDN服务负载均衡WAF防火墙
- 五、Linux系统中的权限管理
- xml中foreach循环
- 复杂网络基础——《链接》
- Nginx无法启动 遇见unknown directive if(!-f in E:\xiangmu\nginx-1.14.0/conf/nginx.conf:28
- UE4(虚幻4)基础:光照需要重建
- Adobe XD和Sketch,谁才是王者?