[剑指Offer]10-II 青蛙跳台阶问题

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

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

示例 1:

输入:n = 2
输出:2

示例 2:

输入:n = 7
输出:21

提示:

  • 0 <= n <= 100

注意:本题与主站 70 题相同:https://leetcode-cn.com/problems/climbing-stairs/

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/

解题思路:
看过剑指offer的人应该对这道题都有印象,那个叫做斐波那契数列其实就是这道题的核心。

科普一下下

斐波那契数列(Fibonacci sequence),又称黄金分割数列、兔子数列,是数学家列昂纳多·斐波那契于1202年提出的数列。

斐波那契数列为1、1、2、3、5、8、13、21、34……此数列从第3项开始,每一项都等于前两项之和,递推公式为F(n)=F(n-1)+F(n-2),n≥3,F(1)=1,F(2)=1。

在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

主要利用的公式就是斐波那契公式的变种F(n)=F(n-1)+F(n-2),n≥3,F(1)=1,F(2)=2

同样很正常可以想到递归,递归是可以实现的,但确实执行时间过长,leetcode网站不接受,所以在此就忽略了。

看非递归算法,也就是循环求的F(1), F(2), F(3) ... F(n), 再把结果累计下来就是总数

public int numWays(int n) {
        if (n<0)
            return 0;
        if (n==1 || n==0)
            return 1;        
        if (n==2)
            return 2;

        int step = 0;
        int fn1 = 1, fn2 = 2;
        int m = 1000000007;
        for(int i=2; i

10-I 斐波那契数列解法相同

https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/

你可能感兴趣的:([剑指Offer]10-II 青蛙跳台阶问题)