《剑指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 ...
随机推荐
- vue框架导入百度地图API接口的方法
百度请求API接口:
- modbus 寄存器介绍
modbus 的查询命令 命令 地址开始(两个地址) 地址长度(两个地址) 检验 01 xx xx xx ...
- MGR架构~高可用架构细节的梳理
一 简介:今天咱们来聊聊mgr的细节原理相关 二 选择新主机制 1 当主节点宕掉,自动会根据服务器的server_uuid变量和group_replication_member_weight变量值 ...
- nginx 开启静态 gzip 配合 Vue 构建
在站点配置添加如下代码: location ~* \.(css|js)$ { gzip_static on; } 这是 nginx 的静态 gzip功能,会自动查找对应扩展名的文件,如果存在 gzip ...
- 使用Swagger自动生成API文档
⒈添加pom依赖 <!-- Swagger核心包,用于扫描程序生成文档数据 --> <dependency> <groupId>io.springfox</g ...
- 【VMware vSphere】再谈VMware vSphere
写在前面 在进行操作vSphere产品之前,就曾经对它进行过一个简单了解:[运维]VMware vSphere简单了解,现在再回头看,发现了解的真的是太简单了.经过前一段时间学习之后,对它又有了新的感 ...
- [转]python3之模块psutil系统性能信息
转自:https://www.cnblogs.com/zhangxinqi/p/9106265.html 阅读目录 1.psutil模块安装 2.获取CPU信息 3.内存信息 4.磁盘信息 5.网络信 ...
- Python3-初识面向对象
知识点: 面向过程VS面向对象 初识类和对象 对象之间的交互 类与对象之间的命名空间 面向对象的组合用法 面向对象的三大特性(封装.继承.多态) 继承 抽象类和接口类 多态 封装 -- (prope ...
- BZOJ3224/LOJ104 普通平衡树 treap(树堆)
您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1. 插入x2. 删除x(若有多个相同的数,因只删除一个)3. 查询x的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. ...
- ubuntu14.04上源码安装openssl1.0.2k
卸载自带openssl sudo apt-get remove openssl 解压文件tar -xzf openssl-1.0.2k.tar.gz 配置 sudo ./config shared - ...