fibonacci climbing-stairs
查找斐波纳契数列中第 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相关推荐
- 算法:Climbing Stairs(爬楼梯) 6种解法
说明 算法:Climbing Stairs(爬楼梯) LeetCode地址:https://leetcode.com/problems/climbing-stairs/ 题目: You are cli ...
- [勇者闯LeetCode] 70. Climbing Stairs
[勇者闯LeetCode] 70. Climbing Stairs Description You are climbing a stair case. It takes n steps to rea ...
- [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 ...
- 70. Climbing Stairs
70. Climbing Stairs 1. 题目 You are climbing a stair case. It takes n steps to reach to the top. Each ...
- 爬楼梯 · Climbing Stairs
[抄题]: 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? [思维问题]: 不知道一步.两步怎么加.还是用iteration迭代.此题公式可被 ...
- 【动态规划 斐波那切数列】LeetCode 746. Min Cost Climbing Stairs
LeetCode 746. Min Cost Climbing Stairs 本博客转载自:http://www.cnblogs.com/grandyang/p/8343874.html 存在无代价的 ...
- 【斐波那切数列】LeetCode 70. Climbing Stairs
LeetCode 70. Climbing Stairs 这是一道利用斐波那切数列求解的题目.求斐波那切数列有比较经典的4种方法 (1)递归法:复杂度太高 (2)迭代法:时间复杂度为O(n)O(n)O ...
- 10.2 动态规划算法套路及空间优化 —— Climbing Stairs Unique Paths
这一篇文章从最简单的动态规划题目开始,结合上一节动态规划三要素,以LeetCode两道基础的DP题目阐述DP问题的基本套路解法. 70. Climbing Stairs You are climbin ...
- 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 ...
- LeetCode Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
最新文章
- CodeGen融合核心关系循环扩展
- Windows7 64bit VS2013 Caffe test MNIST操作步骤
- vue点击增加class_Vuevbind动态绑定class
- 【计算几何】【分类讨论】Gym - 101173C - Convex Contour
- MyBatis-Plus_入门试炼03
- oracle nls_lang gbk,Oracle客户端NLS_LANG参数的设置详解
- Py之pandas:dataframe学习【转载】
- 小白版----使用vm安装win10
- 极通ewebs3.2企业版介绍
- 状态反馈不改变系统传递函数零点的证明
- Android View 监听宿主生命周期
- 关于【正点原子STM32F1开发指南】第五章delay.c文件里fac_us=SystemCoreClock/8000000的保姆级详解
- GEE学习笔记(基础篇)更新中
- Fortran学习3:控制流2:循环
- matlab弹簧振子的阻尼振动,MATLAB计算方法和技巧6_2阻尼振动
- CSS 的background-size:cover属性值和contain属性值
- Caj转pdf有哪些不收费的转换方法?
- 1×pbs缓冲液配方_【pbs缓冲液配制】动物细胞培养pbs缓冲液配制
- 外包岗位对于程序员有什么优势?
- Joggler的MeeGo系统移植
热门文章
- C++ 11 多线程--线程管理
- 适配器模式(为被封装对象提供不同的接口)
- IDEA 程序包org.springframework.web.bind.annotation不存在
- Lock接口Condition,以及Lock与synchronized异同
- 互斥锁、自旋锁和自适应自旋锁
- PyTorch基础(五)----- torch.cat()方法
- C++/java/python 创建二维数组
- 从知识图谱到事理图谱 | CNCC 2017
- 浅析Android插件化
- Building a Simple, Local, Python Blockchain – Part 1