查找斐波纳契数列中第 N 个数。

所谓的斐波纳契数列是指:

  • 前2个数是 0 和 1 。
  • 第 i 个数是第 i-1 个数和第i-2 个数的和。

斐波纳契数列的前10个数字是:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

样例

给定 1,返回 0

给定 2,返回 1

给定 10,返回 34

虽然这道题是一道入门级的题目,可是在第一遍做的时候并没有多想,直接使用的递归,然后数据通过95%,显示的到47的时候就溢出了。经过学习前辈的经验,该题的收获如下:

方法1:使用递归解,时间复杂度是n的指数级别

方法2:开辟一个长度为(n+1)的数组,时间复杂度为O(n),空间复杂度为O(n)

我们计算f(0)、f(1)、f(2)、f(3)。。直到f(n),将这些计算出来的值保存在一个数组arry[n+1]上,这样计算斐波那契数列就相当于是一个填表的过程。时间复杂度大大降低

 1 int Fibonacci(int n)
 2 {
 3     if(n<=0)
 4         return 0;
 5     else if(n==1)
 6         return 1;
 7     else
 8     {
 9         //动态创建一个长度为(n+1)的数组
10         int *arry=new int[n+1];
11         arry[0]=0;
12         arry[1]=1;
13         for(int i=2;i<=n;i++)
14         {
15             arry[i]=arry[i-1]+arry[i-2];
16         }
17         int result=arry[n];
18         delete [] arry;
19         return result;
20     }
21 }

View Code

c++提供delete []表达式释放指针所指向的数组空间。delete [] arry;该语句回收了arry所指向的数组,把相应的内存返回给自由存储区。在关键字delete和指针arry之间的方括号[]是必不可少的:它告诉编译器该指针指向的是自由存储区中的数组,而非单个对象。delete arry只释放了arry指针所指向的内存地址,理论上来说会少释放了内存空间,从而产生内存泄露。

方法3:只保留两个空间变量,空间复杂度为O(1),时间复杂度为O(n)

 1 class Solution {
 2     /**
 3      * @param n: an integer
 4      * @return an integer f(n)
 5      */
 6     public int fibonacci(int n) {
 7         // write your code here
 8         if( n <= 1 ) {
 9             return 0 ;
10         } else if (n ==2 ){
11             return 1 ;
12         }
13         else {
14             int pre = 0 ;
15             int post = 1 ;
16             int fn = 0 ;
17             for(int i=2 ;i<n;i++){
18                 fn = pre + post;
19                 pre = post;
20                 post = fn;
21             }
22             return fn;
23         }
24     }
25 }

相关题目: 爬楼梯

假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

样例

比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法

返回 3

public class Solution {/*** @param n: An integer* @return: An integer*/public int climbStairs(int n) {// write your code hereif (n ==0 )  return 1;//这道题的本质其实和上道题一样,不过我在做这题的时候忽略了n=0的情况,多多练习,多多加油吧if (n ==1 )  return 1;if (n ==2 ){return 2;} else{int pre = 1;int post = 2;int fn=0;for(int i = 3; i<=n; i++){fn = pre+post;pre = post;post = fn;}return fn;}}
}

转载于:https://www.cnblogs.com/wangnanabuaa/p/4951341.html

fibonacci climbing-stairs相关推荐

  1. 算法:Climbing Stairs(爬楼梯) 6种解法

    说明 算法:Climbing Stairs(爬楼梯) LeetCode地址:https://leetcode.com/problems/climbing-stairs/ 题目: You are cli ...

  2. [勇者闯LeetCode] 70. Climbing Stairs

    [勇者闯LeetCode] 70. Climbing Stairs Description You are climbing a stair case. It takes n steps to rea ...

  3. [LeetCode]70.Climbing Stairs

    [题目] You are climbing a stair case. It takes n steps to reach to the top. Each time you can either c ...

  4. 70. Climbing Stairs

    70. Climbing Stairs 1. 题目 You are climbing a stair case. It takes n steps to reach to the top. Each ...

  5. 爬楼梯 · Climbing Stairs

    [抄题]: 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? [思维问题]: 不知道一步.两步怎么加.还是用iteration迭代.此题公式可被 ...

  6. 【动态规划 斐波那切数列】LeetCode 746. Min Cost Climbing Stairs

    LeetCode 746. Min Cost Climbing Stairs 本博客转载自:http://www.cnblogs.com/grandyang/p/8343874.html 存在无代价的 ...

  7. 【斐波那切数列】LeetCode 70. Climbing Stairs

    LeetCode 70. Climbing Stairs 这是一道利用斐波那切数列求解的题目.求斐波那切数列有比较经典的4种方法 (1)递归法:复杂度太高 (2)迭代法:时间复杂度为O(n)O(n)O ...

  8. 10.2 动态规划算法套路及空间优化 —— Climbing Stairs Unique Paths

    这一篇文章从最简单的动态规划题目开始,结合上一节动态规划三要素,以LeetCode两道基础的DP题目阐述DP问题的基本套路解法. 70. Climbing Stairs You are climbin ...

  9. 70. Climbing Stairs【leetcode】递归,动态规划,java,算法

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  10. LeetCode Climbing Stairs

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

最新文章

  1. CodeGen融合核心关系循环扩展
  2. Windows7 64bit VS2013 Caffe test MNIST操作步骤
  3. vue点击增加class_Vuevbind动态绑定class
  4. 【计算几何】【分类讨论】Gym - 101173C - Convex Contour
  5. MyBatis-Plus_入门试炼03
  6. oracle nls_lang gbk,Oracle客户端NLS_LANG参数的设置详解
  7. Py之pandas:dataframe学习【转载】
  8. 小白版----使用vm安装win10
  9. 极通ewebs3.2企业版介绍
  10. 状态反馈不改变系统传递函数零点的证明
  11. Android View 监听宿主生命周期
  12. 关于【正点原子STM32F1开发指南】第五章delay.c文件里fac_us=SystemCoreClock/8000000的保姆级详解
  13. GEE学习笔记(基础篇)更新中
  14. Fortran学习3:控制流2:循环
  15. matlab弹簧振子的阻尼振动,MATLAB计算方法和技巧6_2阻尼振动
  16. CSS 的background-size:cover属性值和contain属性值
  17. Caj转pdf有哪些不收费的转换方法?
  18. 1×pbs缓冲液配方_【pbs缓冲液配制】动物细胞培养pbs缓冲液配制
  19. 外包岗位对于程序员有什么优势?
  20. Joggler的MeeGo系统移植

热门文章

  1. C++ 11 多线程--线程管理
  2. 适配器模式(为被封装对象提供不同的接口)
  3. IDEA 程序包org.springframework.web.bind.annotation不存在
  4. Lock接口Condition,以及Lock与synchronized异同
  5. 互斥锁、自旋锁和自适应自旋锁
  6. PyTorch基础(五)----- torch.cat()方法
  7. C++/java/python 创建二维数组
  8. 从知识图谱到事理图谱 | CNCC 2017
  9. 浅析Android插件化
  10. Building a Simple, Local, Python Blockchain – Part 1