《剑指offer》斐波那契数列
题目一:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
思路:
递归方式:return n<=0 ? 0 : n+fib(n-1)
递归是由于函数调用自身,有时间和空间的消耗,每次自身的调用都需要在内存栈中分配空间以保存参数,返回地址和变量,而且栈中压入和弹出数据都需要时间,效率不高,如果数据过大,会导致栈内存溢出。但是代码简洁。
循环方式:O(n)时间内的操作
循环是通过设置计算的初始值和终止条件在一个范围内重复运算。采用迭代的方式,从头计算后面的值。
C++ Code:
- class Solution {
- public:
- int Fibonacci(int n) { //采用循环的方式时间为O(n)
- int res[] = {,}; //初始的两个值【0,1】
- if (n < ){ //当n小于2直接返回
- return res[n];
- }else{
- int fibOne = ;
- int fibTwo = ;
- int fib = ;
- for (unsigned int i = ;i<=n;i++){
- fib = fibOne + fibTwo;
- fibOne = fibTwo;
- fibTwo = fib;
- }
- return fib;
- }
- }
- };
Python Code:
- # -*- coding:utf-8 -*-
- class Solution:
- def Fibonacci(self, n): #采用循环的方式计算
- # write code here
- res = [0,1] #n为0和1时候为【0,1】
- if n < 2:
- return res[n] #如果n小于2直接返回
- else: #如果n大于2,采用叠加的方式计算
- fibOne = 0
- fibTwo = 1
- fib = 0
- for i in range(2,n+1):
- fib = fibOne + fibTwo #依次计算前面两个值,最终返回
- fibOne = fibTwo
- fibTwo = fib
- return fib
总结:
本题延伸,比如跳台阶问题,或者汉诺塔问题,都是采用递归方式。
如果需要重复性的多次计算相同的问题,通常可以采用递归或者循环两种方式。
题目二:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:
f(n) = f(n-1)+f(n-2)
Python Code:
- # -*- coding:utf-8 -*-
- class Solution:
- def rectCover(self, number):
- # write code here
- res = [0,1]
- if number < 2:
- return res[number]
- one = 0
- two = 1
- for i in range(number+1):
- one,two = two,one+two
- return one
《剑指offer》斐波那契数列的更多相关文章
- 剑指Offer 斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 思路: 不考虑递归 用递推的思路 AC代码: class Solution { public ...
- 剑指Offer——斐波那契数列
题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 分析: 递归解法肯定相当耗时. 因为当n=4时,程序是这样子递归运算的:Fibonacci( ...
- 用js刷剑指offer(斐波那契数列)
牛客网链接 下面介绍一下什么是斐波那契数列 js代码 知道了通项公式,那代码就非常简单了 function Fibonacci(n) { // write code here let pre = 1 ...
- [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖
跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) ...
- 剑指offer7: 斐波那契数列第n项(从0开始,第0项为0)
1. 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 2. 思路和方法 斐波那契数列(Fibonacci sequen ...
- 剑指offer--4.斐波那契数列
int最大范围(有符号情况下,从第0项0开始)能取到第46项1836311903,47项溢出 时间限制:1秒 空间限制:32768K 热度指数:473928 题目描述 大家都知道斐波那契数列,现在要求 ...
- 剑指Offer-7.斐波那契数列(C++/Java)
题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 分析: 斐波那契数列是0,1,1,2,3,5,8,13...也就是当前 ...
- 剑指Offer07 斐波那契数列
/************************************************************************* > File Name: 07_Fibona ...
- [剑指Offer]10-斐波那契数列(循环)-Java
题解 使用循环,时间复杂度O(n). 相关 跳台阶:f(n)=f(n-1)+f(n-2) 变态跳台阶:f(n)=2*f(n-1) 矩形覆盖:f(n)=f(n-1)+f(n-2) 全部用循环代替递归,使 ...
- 剑指offer_斐波那契数列
package solution; public class Fibonacci { /* * f(n) = f(n-1) + f(n-2) n>1 * f(0) = 0 * f(1) = 1 ...
随机推荐
- python中前后端通信方法Ajax和ORM映射(form表单提交)
后端从数据库获取数据给到前端: 第一种方式: admin.py文件代码: @admin.route('/showList') def show(): # 获取数据库所有文章数据,得到一个个对象 res ...
- 5.28 js基础 简介
Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) JavaScript历史背景介绍 布 ...
- JSTL 递增序号
<c:forEach items="${signBusList}" var="sign" varStatus="xh"> ${x ...
- undefined symbol
参考链接: https://blog.csdn.net/shatterheart/article/details/52440149
- cookie——创建、获取、删除
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- HashSet、TreeSet和LinkedHashSet分别基于HashMap、TreeMap和LinkedHashMap
1.如果你需要一个访问快速的Set,你应该使用HashSet: 当你需要一个排序的Set,你应该使用TreeSet: 当你需要记录下插入时的顺序时,你应该使用LinedHashSet. 2.因为Tre ...
- 不使用setCustomView,设置ActionBar标题居中
仅供参考,有太多自定义标题栏需求时,还是建议使用setCustomView https://blog.csdn.net/chiceT/article/details/50455358
- 关于VXLAN的认识-----ovs+vxlan多链路负载分担的实现方法
一.应用环境 目前大部分网关或服务器设备常采用双链路同时接入多条ISP链路的方式来满足网络的负载均衡和主备切换等,实现该功能常用的方法是利用策略路由技术,根据链路的网络状况和权重配置在路由时动态选择不 ...
- Idea实用配置
参考:https://github.com/judasn/IntelliJ-IDEA-Tutorial 1.代码提示不区分大小写 2.跳到指定行 Ctrl + G Ctrl 快捷键 介绍 Ctrl + ...
- cartographer 安装
Debian 8 Jessie 一顿操作梦如虎,最后不知道咋装上的. 参考:https://www.jianshu.com/p/9922a51ce38f https://blog.csdn.net/p ...