剑指offer系列8--青蛙跳台阶问题

【题目】一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
【思路】
* n=1时,有1种跳法,f(1)=1;
* n=2时,有2种跳法,f(2)=2;
* n=3时,有3种跳法,f(3)=3=f(3-1)+f(3-2)=f(2)+f(1);
* n=4时,有5种跳法,f(4)=f(4-1)+f(4-2)=f(3)+f(2)=5;

【code】

 1 package com.exe2.offer;
 2
 3 /**
 4  * 【题目】一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
 5  * 【思路】
 6  *        n=1时,有1种跳法,f(1)=1;
 7  *           n=2时,有2种跳法,f(2)=2;
 8  *           n=3时,有3种跳法,f(3)=3=f(3-1)+f(3-2)=f(2)+f(1);
 9  *        n=4时,有5种跳法,f(4)=f(4-1)+f(4-2)=f(3)+f(2)=5;
10  *        ....
11  * @author WGS
12  *
13  */
14 public class Qingwa {
15     public int jumpStep(int n){
16         int[] arrs=new int[]{0,1,2};
17         int sum=0;
18         int one=2;//f(1)=1;
19         int two=1;//f(0)=0;
20         if(n<=2){
21             return arrs[n];
22         }else{
23             for(int i=3;i<=n;i++){
24                 sum=one+two;
25                 two=one;
26                 one=sum;
27             }
28         }
29
30         return sum;
31
32     }
33     public static void main(String[] args){
34         Qingwa qw=new Qingwa();
35         int n=qw.jumpStep(8);
36         System.out.println("青蛙跳有多少种跳法?"+n);
37     }
38 }
时间: 2024-10-10 18:12:39

剑指offer系列8--青蛙跳台阶问题的相关文章

《剑指Offer》题目:跳台阶

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题目分析:这其实就是斐波拉契数列,递归的思想,用递推来实现,防止栈溢出. public class JumpFloor { public static int jumpFloor(int target) { int res[] = new int[2]; res[0]=1; res[1]=2; // 与前面的题只有初始值不一样 int temp = 0; if(target==0) return

剑指offer(8)跳台阶

题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 解题代码: function jumpFloor(number) { // write code here //跳台阶问题是斐波那契数列的一个形式转换,要跳上n级台阶 //如果第一步跳1级,剩下台阶的跳法即为跳上n-1级台阶的跳法 //如果第一步跳2级,剩下台阶的跳法即为跳上n-2级台阶的跳法 if(number <= 2){ return number; } va

剑指OFFER----面试题10- II. 青蛙跳台阶问题

链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/ 代码: class Solution { public: int numWays(int n) { std::vector<int> vec = {1, 1}; for(int i = 2; i <= n; i++){ vec.push_back((vec[i-2] + vec[i-1])%1000000007); } return vec[n];

剑指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

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

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

剑指Offer系列之题6~题10

目录 6.用两个栈实现队列 7.旋转数组的最小数字 8.斐波那契数列 9. 跳台阶 10.变态跳台阶 ?? 6.用两个栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 考虑栈1用于存储元素,出队时,将栈1的元素压入栈2,此时栈2中元素从栈顶到底即其入队的顺序,然后出栈.若出队时栈2非空,则直接从栈2弹出元素. 1.根据栈2是否空将栈1元素全部压入: import java.util.Stack; public class Solution { St