今天的几道题目都是关于斐波那契数列的。

  题目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)的更多相关文章

  1. 剑指Offer面试题:1.实现Singleton模式

    说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...

  2. 剑指Offer面试题:14.链表的倒数第k个节点

    PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...

  3. 《剑指offer》面试题12:打印1到最大的n位数

    面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...

  4. 《剑指offer》面试题11: 数值的整数次方

    面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...

  5. 剑指 Offer 题目汇总索引

    剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格              ...

  6. 面试题目——《剑指Offer》

    1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...

  7. 剑指offer习题集2

    1.把数组排成最小的数 class Solution { public: static bool compare(const string& s1, const string& s2) ...

  8. 剑指offer习题集1

    1.打印二叉树 程序很简单,但是其中犯了一个小错误,死活找不到,写代码要注意啊 这里左右子树,要注意是node->left,结果写成root->left vector<int> ...

  9. 剑指Offer:面试题20——顺时针打印矩阵(java实现)

    题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...

  10. 牛客网上的剑指offer题目

    题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...

随机推荐

  1. Ansible 拷贝文件或目录

    写法如下: [root@localhost ~]$ ansible 192.168.119.134 -m copy -a "src=/etc/passwd dest=/tmp/passwd ...

  2. 【转】APK反编译

    学习和开发Android应用有一段时间了,今天写一篇博客总结一下Android的apk文件反编译.我们知道,Android应用开发完成之后,我们最终都会将应用打包成一个apk文件,然后让用户通过手机或 ...

  3. Linux:Day4(上) 文件管理、管道

    文件管理:cp.mv.rm 复制命令:cp cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION] ...

  4. TCP三次握手与四次握手

    背景描述 通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之间的通信.但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在 ...

  5. Python-wxpy信息爬取发送至微信(小白级)

    Wxpy初体验 1.1 安装wxpy 在这里默认大家以及安装好了pip,我们需要安装wxpy 以及wechat_sender 两个包,这里推荐使用国内的豆瓣源,如果大家网速过硬 请忽略.. 1 2 p ...

  6. esp8266驱动液晶屏

    ESP8266 + 1.44 TFT LCD https://www.joaquim.org/esp8266-wifi-scan/ LCD ILI9341 (320×240). Source Code ...

  7. 仿照wtform自定义Form组件

    仿照wtforms自定义Form组件 1.wtforms 点击查看源码分析及使用方法 2.自定义Form组件 #!usr/bin/env python # -*- coding:utf-8 -*- f ...

  8. windows下使用svn命令行

    1.安装“Slik-Subversion-1.9.7-win32.zip”,将路径写入windows的path路径 2.在cmd下可以执行svn 3.应为tortoiseSVN的版本比1的版本低,导致 ...

  9. sk_buff Structure

    The structure has changed many times in the history of the kernel,both to add new options and to reo ...

  10. Keil软件常见配置

    1.tab键占据字节数 Edit-->Configuration-->Tab Size-->安装上默认2个空格,这里改为4,符合通用代码编辑器的处理. 2.编码配置 Edit--&g ...