AC 剑指 Offer 10- II. 青蛙跳台阶问题

简介: AC 剑指 Offer 10- II. 青蛙跳台阶问题

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

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:2
示例 2:

输入:n = 7
输出:21
示例 3:

输入:n = 0
输出:1
提示:

0 <= n <= 100

import java.math.BigInteger;

class Solution {
    /**
     * @Title: numWays
     * @Description: DP经典,重在推导DP公式
     * @author: itbird
     * @date 2022年3月15日 下午5:00:05
     * @param n
     * @return int 时间复杂度: O(N) 空间复杂度: O(1)
     */
    public int numWays(int n) {
        // 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法
        // f(1) = 1,f(2) = 2,f(3) = 3,f(4) = 5
        // f(n) = f(n-2) + f(n-1)

        if (n <= 0) {
            return 1;
        }

        if (n < 3) {
            return n;
        }

        BigInteger f1 = new BigInteger("1"); // 代表n-2
        BigInteger f2 = new BigInteger("2"); // 代表n-1
        BigInteger fn = new BigInteger("0");
        while (n > 2) {
            fn = f1.add(f2);
            f1 = f2;
            f2 = fn;
            n--;
        }
        return fn.mod(new BigInteger("1000000007")).intValue();
    }
}
目录
相关文章
|
6天前
|
存储 Java 测试技术
剑指 Offer 10- I. 斐波那契数列
剑指 Offer 10- I. 斐波那契数列
9 0
|
6天前
剑指 Offer 10- II:青蛙跳台阶问题
剑指 Offer 10- II:青蛙跳台阶问题
35 1
|
6天前
剑指 Offer 10- I:斐波那契数列
剑指 Offer 10- I:斐波那契数列
19 1
LeetCode剑指 Offer 49. 丑数(dp/打表)
LeetCode剑指 Offer 49. 丑数(dp/打表)
|
C++ 容器
剑指 Offer 58 - II. 左旋转字符串(3种方法)
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。 请定义一个函数实现字符串左旋转操作的功能。 比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
47 0
图解LeetCode——剑指 Offer 10- II. 青蛙跳台阶问题
图解LeetCode——剑指 Offer 10- II. 青蛙跳台阶问题
76 0
图解LeetCode——剑指 Offer 57. 和为s的两个数字
图解LeetCode——剑指 Offer 57. 和为s的两个数字
49 1
|
算法
LeetCode:剑指 Offer 58 - II. 左旋转字符串
题目描述:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。