剑指OFFER笔记_10_2_青蛙跳台阶问题_JAVA实现

本文详细解析了青蛙跳台阶问题的解题思路,通过对比斐波那契数列,阐述了如何利用递推公式f(n)=f(n-1)+f(n-2)解决该问题,并提供了JAVA代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:青蛙跳台阶问题

  • 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。

解题思路

  • 这题和斐波那契数列非常类似。
  • 跳上1级台阶有1种方法(f(1))。跳上2级台阶有2种方法(1、1和2)。
  • 跳上3级台阶(f(3))我们有两种大方向。第一种是第1次只跳上1级台阶,然后考虑剩下(3-1)级台阶有几种跳法(f(1))。第二种是第1次跳上2级台阶,然后考虑剩下(3-2)级台阶有几种跳法(f(2))。
  • 以此类推,f(n)=f(n-1)+f(n-2)。只是前几项和斐波那契数列有所不同。
  • 斐波那契数列:第0项为0,第一项是1,第二项是1,之后可以按照公式得到。
  • 此题:第0项为0,第一项是1,第二项是2,之后也可以按照公式得到,所以对前一题的代码进行稍微的修改即可。

代码

函数主体部分代码

package q10_2;

/**
 * 青蛙跳台阶问题
 * 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。
 * 求该青蛙跳上一个n级的台阶总共有多少种跳法。
 * @author asus
 *
 */
public class Solution {
	public static int fib(int n) {
		//第0项值为0
		if(n == 0)
		{
			return 0;
		}
		//第1项为1
		if(n == 1)
		{
			return 1;
		}
		//第2项为2
		if(n == 2)
		{
			return 2;
		}
		
		//从第二项开始考虑
		//预储存第1项
		int fibSmaller = 1;
		//预储存第2项
		int fibBigger = 2;
		int temp = 0;
		for(int i = 3; i <= n; i++)
		{
			temp = (fibSmaller + fibBigger) % 1000000007;
			//大项作小项
			fibSmaller = fibBigger;
			//之前的大项小项和作为大项
			fibBigger = temp;
		}
		
		return temp;
    }		
}

测试部分代码

package q10_2;

import q10_2.Solution;

public class TestApp {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//求数列中的0-20项
		for(int i = 0; i <= 20; i++)
		{
			System.out.println("数列中第" + i + "个数是: " + Solution.fib(i));
		}
	}
}

运行结果截图

在这里插入图片描述

LeetCode运行截图

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值