7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------剑指offer系列
题目:斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
f(n) = f(n-1) + f(n-2)
基本思路
这道题在剑指offer
中实际是当作递归的反例来说的。
递归的本质是吧一个问题分解成两个或者多个小问题,如果多个小问题存在互相重叠的情况,那么就存在重复计算。
f(n) = f(n-1) + f(n-2)
这种拆分使用递归是典型的存在重叠的情况,所以会造成非常多的重复计算。
另外,每一次函数调用爱内存中都需要分配空间,每个进程的栈的容量是有限的,递归层次过多,就会造成栈溢出。
递归是从最大数开始,不断拆解成小的数计算,如果不去考虑递归,我们只需要从小数开始算起,从底层不断往上累加就可以了,其实思路也很简单。
代码
function Fibonacci(n)
{if(n<=1){return n;}let i = 1;let pre = 0;let current = 1;let result = 0;while(i++ < n){result = pre + current;pre = current;current = result;}return result;
}
题目:跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
基本思路
找规律:
跳三级台阶等于跳两级台阶的跳法+跳一级台阶的跳法。
跳四级台阶等于跳三级台阶的跳法+跳二级台阶的跳法。
明显也符合斐波那契数列的规律
f(n) = f(n-1) + f(n-2)
代码
function jumpFloor(n)
{if(n<=2){return n;}let i = 2;let pre = 1;let current = 2;let result = 0;while(i++ < n){result = pre + current;pre = current;current = result;}return result;
}
题目:变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
f(n) = f(n-1) + f(n-2)
基本思路
每个台阶都可以选择跳或者不跳,最后一个台阶必跳。
每个台阶有两种选择,n个台阶有2的n次方种选择。
所以一共有2的n-1次跳法。
使用位运算
代码
function jumpFloorII(number) {return 1<<(--number);//Math.power(2,number-1) }
题目:矩形覆盖
基本思路
假设为2*8,f(8)用第一个小矩形去覆盖左边有两种,竖着的之后,右边有f(7)中选择,当横着的时候,有f(6)中选择,所以f(8)=f(7)+f(6),也是斐波那契数列,n=1时只有一种,n=2时有两种,f(n)=f(n-1)+f(n-2)
代码
function rectCover(number)
{// write code hereif(number<0)return ;if(number<=2)return number;let [one,two]=[1,2];let temp;for(var i=3;i<=number;i++){temp=one;one=two;two=temp+two;}return two;
}
转载于:https://www.cnblogs.com/QianDingwei/p/10923738.html
7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------剑指offer系列相关推荐
- 斐波那契数列 青蛙跳台阶 变态跳台阶
目录 一.斐波那契数列 二.青蛙跳台阶问题 三.变态跳台阶 一.斐波那契数列 题目:写一个函数,输入n,求斐波那契数列的第n项. 思路:用递归的方法,f(n) =f(n-1) + f(n-2).代码比 ...
- 面试题9:斐波那契数列
题目1:写一个函数,输入n,其斐波那契数列的第n项. 斐波那契数列的定义如下: 方法1:使用递归解,时间复杂度是n的指数级别 斐波那契数列的定义就是递归的,我们根据定义可以很简单的写出代码.代码如下: ...
- 趣学算法--斐波那契数列
14天阅读挑战赛 努力是为了不平庸~ 目录 1.神奇的兔子数列 1.1问题分析 1.2斐波那契数列 1.3算法设计 1.3.1递归代码 1.3.2递归的改进,O(n)的代码 1.3.3时间复杂度为O( ...
- 漫谈斐波那契数列与黄金分割比
(一)奇妙的斐波那契数列: 斐波那契数列的由来是"兔子问题". 从中总结的规律就是: (1)每个月小兔子数 = 上个月的大兔子数: (2)每个月的大兔子数 = 上个月的大兔子数 + ...
- 斐波那契数列与黄金分割比
原文地址:https://blog.csdn.net/g1933375079/article/details/18773641(如有侵权请联系删除) (一)奇妙的斐波那契数列: 斐波那契数列的由来是& ...
- 斐波那契数列112358c语言编程,c语言中的斐波那契数列
本文概述 C中的斐波那契数列:对于斐波那契数列,下一个数字是前两个数字的和,例如0.1.1.2.3.5.8.13.21等.斐波那契数列的前两个数字为0和1. 编写fibonacci系列程序的方法有两种 ...
- 斐波那契数列及青蛙跳台阶问题
题目1: 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项. 斐波那契(Fibonacci)数列定义例如以下: f(n)=⎧⎩⎨⎪⎪0,1,f(n−1)+f(n−2),n=0n=1n& ...
- 算法练习day20——190411(重建二叉树、斐波那契数列、跳台阶、矩形覆盖、变态跳台阶、旋转数组的最小数字、矩阵中的路径)
1.重建二叉树 根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. preorder = [3,9,20,15,7].inorder = [9 ...
- 《剑指offer》-- 斐波那契数列、跳台阶问题 、变态跳台阶问题、矩阵覆盖
一.斐波那契数列: 1.题目: 现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39. 2.什么是斐波那契数列? 斐波那契数列指的是这样一个数列: 0, 1, ...
最新文章
- 列子御风 大道至简 心诚天人合一
- javascript之parseInt的用法分析
- 细说plsql中的空值表达式
- #pragma pack(1)的作用
- oracle 12c 自动任务,Oracle job自动任务实用指南
- redis基本类型以及优点特性
- 美国量子计算机能编程吗,世界首台可编程通用量子计算机美国问世
- linux vmware 安装后无法桥接到物理网卡的解决办法
- oracle表空间管理图形界面,Oracle表空间管理和优化
- Eclipse-maven项目不将resources下的文件打到classpath下
- php query builder,php – Symfony2 – Doctrine2 QueryBuilder WHERE I...
- 【NLTK基础】一文轻松使用NLTK进行NLP任务(附视频)
- 如何简单运行Java程序
- 如何做项目总结与汇报
- java运算符与数字分解,看完对java更加有信心了(主除以和取余的理解)
- python 实现布谷鸟算法(CS)
- 【增大C盘内存——拓展卷】C盘与未分配空间之间有恢复分区的解决方法——安装diskgenius
- 【搜索与回溯算法】保卫农场(DFS)
- 域渗透基础之NTLM认证协议
- 双网卡单IP实现网卡冗余与负载均衡
热门文章
- ORA-16629: database reports a different protection
- 219. Contains Duplicate II
- pageContext.findAttribute()与pageContext.getAttribute()的区别
- 基于Linux的集群系统(一)
- 成都机场迎春运客流高峰 日均起降航班超1000架次
- 易飞90设计自己定义画面新增功能说明
- 用HttpWebRequest抓取网页,尝试自动重定向的次数太多”的错误,
- awk的集合操作实现
- 关于学习Mongodb的几篇文章
- python3.x安装cv2失败