剑指offer编程题Java实现——面试题9斐波那契数列

题目:写一个函数,输入n,求斐波那契数列的第n项。

 1 package Solution;
 2
 3 /**
 4  * 剑指offer面试题9:斐波那契数列
 5  * 题目:写一个函数,输入n,求斐波那契数列的第n项。
 6  *                     0,                n=1
 7  *     斐波那契数列定义如下:f(n)=      1,                n=2
 8  *                                 f(n-1)+f(n-2),    n>2
 9  * @author GL
10  *
11  */
12 public class No9Fibonacci {
13
14     public static void main(String[] args) {
15         System.out.println("第4项斐波那契数列的值为:"+fibonacci(4));
16     }
17
18     /*
19      * 采用递归实现斐波那契数列生成函数,效率低
20      */
21     public static int generateFibonacci(int n){
22         if(n==0)
23             return 0;
24         if(n==1)
25             return 1;
26         return generateFibonacci(n-1)+generateFibonacci(n-2);
27     }
28
29     /*
30      * 采用循环实现斐波那契数列
31      * 存储数列中间项,求得结果
32      */
33     public static int fibonacci(int n){
34         int[] result={0,1};
35         if(n<2)
36             return result[n];
37         int fibNMinusOne=1;
38         int fibNMinusTwo=0;
39         int fibN=0;
40         for(int i=2;i<=n;i++){
41             fibN=fibNMinusOne+fibNMinusTwo;
42             fibNMinusTwo=fibNMinusOne;
43             fibNMinusOne=fibN;
44         }
45         return fibN;
46     }
47 }
时间: 2024-08-06 23:34:30

剑指offer编程题Java实现——面试题9斐波那契数列的相关文章

剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现

用字符串或者数组表示大数是一种很简单有效的表示方式.在打印1到最大的n为数的问题上采用的是使用数组表示大数的方式.在相关题实现任意两个整数的加法.减法.乘法的实现中,采用字符串对大数进行表示,不过在具体的计算中,还是要将字符串转化成字符数组来进行计算. 实现两个大数的加法,要考虑到两个问题,两个数的和的位数问题,以及如何处理两个数按位相加产生的进位问题.首先两个整数相加,两个数的和的位数最多比最大的整数的位数多1:这样和的位数就确定了.对于进位问题,我的做法是先进行按位相加,相加操作完成后再按照

剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个为空的队列中,再把队列中最后的元素poll出来两个队列在栈不为空的情况下始终是有一个为空,另一个不为空的.push添加元素到非空的队列中,pop把非空队列的元素转移到另一个空的队列中,直到剩下最后一个元素,这个元素就是要出栈的元素(最后添加到队列中的元素). 1

剑指offer编程题Java实现——面试题10二进制中1的个数

题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变成0,与运算进行多少次就有多少个1. 1 package Solution; 2 /** 3 * 剑指offer面试题10:二进制中1的个数 4 * 题目:请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数. 5 * 例如,把9表示成二进制是1001,有2位是1,该函数输出2 6 * 解法

剑指offer编程题Java实现——面试题14调整数组顺序使奇数位于偶数之前

题目: 输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分. 解题思路:数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初始化时候指向数组尾部,第一个指针指向的数字总是偶数,第二个指针指向的数字总是奇数,如果第一个指针在第二个指针之前,则交换两指针指向的元素. 1 package Solution; 2 3 /** 4 * 剑指offer面试题14:调整数组顺序是奇数位于偶数前面 5 * 题目:输入一个整数数组,实现一

剑指offer编程题java实现

面试题三:查找二维数组中元素问题 public static void main(String[] args){         int[][] num = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};        search(num,7);              }      public static void search(int[][] arr,int target){          int rows = arr.length

LeetCode | 面试题10- I. 斐波那契数列【剑指Offer】【Python】

LeetCode 面试题10- I. 斐波那契数列[剑指Offer][Easy][Python][动态规划] 问题 力扣 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出. 答案需要取模 1e9+7(1000000007),如计算初始结果为:10000000

Java与算法之(3) - 斐波那契数列

斐波那契数列问题:如果一对兔子每月能生1对小兔子,而每对小兔在它出生后的第三个月里,又能开始生1对小兔子,假定在不发生死亡的情况下,由一对初生的兔子开始,1年后能繁殖出多少对兔子? 首先手工计算来总结规律,如下表注意总数这一列 1+1=2 1+2=3 2+3=5 3+5=8 5+8=13 可以得出规律,第n个斐波那契数=第n-1个斐波那契数+第n-2个斐波那契数 为了计算n,必须计算n-1和n-2:为了计算n-1,必须计算n-2和n-3:直到n-x的值为1为止,这显示是递归大显身手的地方.来看代

剑指Offer编程题(Java实现)——二维数组中的查找

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 解题思路 根据排序特点,该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边. 因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间,当前元素的查找区间为左下角的所有元素. 时间复杂度 O(M + N),空间复杂度 O(1).其中 M 为行数,N

剑指Offer编程题(Java实现)——反转链表

题目描述 输入一个链表,反转链表后,输出新链表的表头. 思路一 使用头插法迭代进行反转 实现 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode ReverseList(ListNode head) { ListNode newHead = new ListNode(-1