剑指offer(7)
今天的几道题目都是关于斐波那契数列的。
题目1:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
传统的方法采用递归函数,这种方法也是我们在大学刚刚接触递归函数时老师给的例子。但这种方法会消耗大量的时间和空间,所以在此我们不使用这种方法。
思路大致如下图

public class Solution {
public int Fibonacci(int n) {
int[] a ={0,1};
if(n<2){
return a[n];
}
int numberOne = 0;
int numberTwo = 1;
int numberResult = 0;
for(int i=2; i<=n; i++){
numberResult = numberOne + numberTwo;
numberOne = numberTwo;
numberTwo = numberResult;
}
return numberResult;
}
}
题目2:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
先考虑简单情况,如果只有一级台阶,那么结果很显然是1.如果有两级台阶,那么我们就有两个选择了,一种是一次跳一级,跳两次,另外一种是一次跳两级。
接着考虑一般情况,把n级台阶时的调发看做n的函数f(n),当n>2时,如果第一次跳一级那么我们可以表示成1+f(n-1),若第二次跳两级我们可以表示成2+f(n-2),第一种情况有f(n-1)种方案,第二种方案有f(n-2)种方案,这样,总体我们就有f(n)=f(n-1)+f(n-2)种方案,不难发现这实际上就是斐波那契数列。
public class Solution {
public int JumpFloor(int target) {
int[] a ={0,1,2};
if(target<=2){
return a[target];
}
int numberOne = 1;
int numberTwo = 2;
int numberResult = 0;
for(int i=3; i<=target; i++){
numberResult = numberOne + numberTwo;
numberOne = numberTwo;
numberTwo = numberResult;
}
return numberResult;
}
}
题目3:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
这道题目可以沿用上一题的思路,如果只有一级台阶,那么只有一种法案,如果有两级台阶我们就回到了上一题f(2)=f(2-1)+f(2-2),如果有三级台阶那么我们可以第一次跳一级1+f(3-1),第一次跳两级2+f(3-2),或者第一次跳三级3+f(3-3),可得出f(3)=f(3-1)+f(3-2)+f(3-3)。
当有n级台阶时,f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2)+f(n-1)
当有n-1级台阶时,f(n-1) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2)
不难发现f(n)=2*f(n-1),一个等比数列,易得f(n)=2^(n-1)
public class Solution {
public int JumpFloorII(int target) {
int jumpNumber = 1;
while((--target)!=0){
jumpNumber*=2;
}
return jumpNumber;
}
}
题目4:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
这题依旧是上面的思想,只是理解上有点小坑。
public class Solution {
public int RectCover(int target) {
int a[] = {0,1,2};
if(target<=2){
return a[target];
}
int numberOne = 1;
int numberTwo = 2;
int numberResult = 0;
for(int i=3;i<=target;i++){
numberResult = numberOne + numberTwo;
numberOne = numberTwo;
numberTwo = numberResult;
}
return numberResult;
}
}
剑指offer(7)的更多相关文章
- 剑指Offer面试题:1.实现Singleton模式
说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...
- 剑指Offer面试题:14.链表的倒数第k个节点
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...
- 《剑指offer》面试题12:打印1到最大的n位数
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...
- 《剑指offer》面试题11: 数值的整数次方
面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...
- 剑指 Offer 题目汇总索引
剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格 ...
- 面试题目——《剑指Offer》
1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...
- 剑指offer习题集2
1.把数组排成最小的数 class Solution { public: static bool compare(const string& s1, const string& s2) ...
- 剑指offer习题集1
1.打印二叉树 程序很简单,但是其中犯了一个小错误,死活找不到,写代码要注意啊 这里左右子树,要注意是node->left,结果写成root->left vector<int> ...
- 剑指Offer:面试题20——顺时针打印矩阵(java实现)
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...
- 牛客网上的剑指offer题目
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...
随机推荐
- Loj #2731 「JOISC 2016 Day 1」棋盘游戏
Loj 2731 「JOISC 2016 Day 1」棋盘游戏 JOI 君有一个棋盘,棋盘上有 \(N\) 行 \(3\) 列 的格子.JOI 君有若干棋子,并想用它们来玩一个游戏.初始状态棋盘上至少 ...
- JWT(JSON Web Token)
摘要: 在Web应用中,使用JWT替代session并不是个好主意 适合JWT的使用场景 抱歉,当了回标题党.我并不否认JWT的价值,只是它经常被误用. 什么是JWT 根据维基百科的定义,JSON W ...
- Python selenium ActionChains 基本操作
ActionChains类继承自object类,但是需要为其传入一个driver对象,即ActionChains(driver) 此类常用于模拟鼠标键盘操作,其API列表如下: perform() ...
- [HEOI2016/TJOI2016]排序
嘟嘟嘟 首先这题的暴力是十分好写的,而且据说能得不少分. 正解写起来不难,就是不太好想. 根据做题经验,我想到了给这个序列转化成01序列,但是接下来我就不会了.还是看了题解. 因为查询只有一个数,所以 ...
- 字符串相关的hash值(一)
- 【转】如何判断ARP欺骗?该怎么防护?
因为在进行通信的时候,数据是通过MAC地址与IP地址的对应关系来进行转发的.若其中MAC地址与IP地址对应的关系出错,就会导致数据错误转发,影响正常通信.通过某种手段,来更改MAC与IP地址的对应关系 ...
- sqlplus编译失效对象
原文整理自:http://www.51testing.com/?uid-16403-action-viewspace-itemid-98161:http://www.eygle.com/archive ...
- Oracle 周相关函数
Oracle 周相关函数 select trunc(sysdate,'W'), --每月1日作为第一个星期第一天 取当前周第一天对应日期 trunc(sysdate,'WW'), --每年1月1日 ...
- maven的下载,环境变量配置,和eclipse配置,和IntelliJIDEA配置
一.maven简介 Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖 ...
- sklearn 模型选择和评估
一.模型验证方法如下: 通过交叉验证得分:model_sleection.cross_val_score(estimator,X) 对每个输入数据点产生交叉验证估计:model_selection.c ...