剑指offer系列7--Fibonacci数列n项值

【题目】求Fibonacci的第n项。

【思路】第一种方法根据定义式直接用递归的方法,但是效率不高;

       第二种改进的方法如下;

 1 package com.exe2.offer;
 2
 3 /**
 4  * 7【题目】求Fibonacci的第n项。
 5  *  【思路】第一种方法根据定义式直接用递归的方法,但是效率不高;
 6  *          第二种改进的方法如下;
 7  *          Fibonacci数列:0 1 1 2 3 5 8 13 21 34
 8  *          Fibonacci函数:n=0 f(n)=0
 9  *                n=1 f(n)=1
10  *                n>=2 f(n)=f(n-1)+f(n-2)
11  *          例:fibnfun=fibnOne+fibnTwo;
12  *                f(2)=f(1)   +f(0)
13  *                f(3)=f(2)   +f(1)
14  *                f(4)=f(3)   +f(2)
15  *          所以:  fibnTwo=fibnOne;
16                   fibnOne=fibnfun;
17  * @author WGS
18  *
19  */
20 public class Fibonacci {
21
22     public int getNum(int n){
23         int fibnfun=0;
24         int fibnOne=1;
25         int fibnTwo=0;
26         if(n==0){
27             return 0;
28         }else if(n==1){
29             return 1;
30         }
31
32         //n>=2
33         for(int i=2;i<=n;i++){
34             fibnfun=fibnOne+fibnTwo;
35             fibnTwo=fibnOne;
36             fibnOne=fibnfun;
37         }
38         return fibnfun;
39
40     }
41
42     public static void main(String[] args){
43         Fibonacci f=new Fibonacci();
44         int n=f.getNum(9);
45         System.out.println(n);
46     }
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 }
时间: 2024-10-12 13:38:48

剑指offer系列7--Fibonacci数列n项值的相关文章

python剑指offer系列二叉树中和为某一值的路径

题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的数组靠前) # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # 返回二维列

剑指Offer系列之题11~题15

目录 11.矩形覆盖 12.二进制中1的个数 13. 数值的整数次方 14.调整数组顺序使奇数位于偶数前面 15.链表中倒数第k个结点 11.矩形覆盖 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 斐波那契数列的应用 第一次竖着放一块类比为走一步,第一次横着放两块类比为走两步 代码与上面的斐波那契数列类题目类似,此处不再赘述:剑指Offer系列之题6~题10. 12.

剑指offer系列4:斐波那契数列

剑指offer第九题,这个题很古老了.第一个想到的肯定是递归,很简单. 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 class Solution { 5 public: 6 int Fibonacci(int n) { 7 if (n == 0) 8 { 9 return 0; 10 } 11 if (n==1||n==2) 12 { 13 return 1; 14 } 15 else 16 {

剑指offer系列10:合并两个排序的链表

我拿到这个题的时候举的例子是链表1:1.3.5.7和链表2:2.4.6.8.我的思路是以:1为基础,将表2的每个结点插入表1.也就是说我一次性是要给新建立的链表中加入两个元素,分别是两个原始链表的头结点.这个思路我做了半天头脑一片混乱,中间指针实在不知道怎么弄了.于是我去睡了一觉,哈哈,我大概是这个世界上最会逃避的人了…… 看了答案使用了递归的方法,其实我做的时候我有想到要用递归,但是没用的原因是我一般写代码不喜欢用递归,原因有两个,一个是递归容易死循环,一个是递归的复杂度太高.但这道题真的太适

剑指offer系列47:堆成的二叉树

这个题的主要思路是: 用二叉树的左子树的右子树和右子树的左子树比较,再用左子树的左子树和右子树的右子树比较.(好像有点绕,但其实就是堆成的思想) 剑指offer的说法是用数的前序遍历的两个方法,前序遍历应该是:根->左->右.但是我们用另一种前序遍历:根->右->左.如果这两个序列一样就判断它是对称的. 这两个方法在实现上其实是一样的. 1 class Solution { 2 public: 3 bool isSymmetrical(TreeNode* pRoot) 4 { 5

【Java】 剑指offer(34) 二叉树中和为某一值的路径

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 思路 1.假设找到了其中一条路径,达到叶结点后,由于没有指向父结点的指针,所以必须提前创建一个链表存储前面经过的结点. 2.由于是从根结点出发,所以要想到使用前序遍历 3.利用链表存储结点,在该结点完成左右子树的路径搜索后(即递归函数结束,返回

剑指offer系列——48.不用加减乘除做加法

Q:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. T: 1.使用进制. 两个数异或:相当于每一位相加,而不考虑进位: 两个数相与,并左移一位:相当于求得进位: 将上述两步的结果相加 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2. 第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果. 第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12. 同样我们可以用三步走的方

剑指offer系列——7.斐波拉契数列

Q:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 C:时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M A:最简单的就是递归-- int Fibonacci(int n) { if (n == 1 || n == 2) return 1; else if (n == 0) return 0; else { return Fibonacci(n - 1) + Fibonacci(n - 2);

剑指offer系列源码-斐波那契数列

题目1387:斐波那契数列 时间限制:1 秒内存限制:32 兆特殊判题:否提交:5415解决:1603 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.斐波那契数列的定义如下: 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70). 输出: 对应每个测试案例, 输出第n项斐波那契数列的值. 样例输入: 3 样例输出: 2 #include<iostream> #include<stdio.h&g