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

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

leetcode题目链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:2
示例 2:
输入:n = 7
输出:21
示例 3:
输入:n = 0
输出:1
提示:
0 <= n <= 100

解题思路: 这道题同样可以使用动态规划。当台阶为0时,只有1种发发,台阶为1时,只有1种方法,台阶为2时,有2种方法,分别时[1,1],[2],台阶为3时,有3种方法[1,1,1],[1,2],[2,1],依次类推,4个台阶可以看成1个台阶和三个台阶…
所以爬n节台阶可以看成是爬n-1节台阶和爬n-2节台阶的子集的合。依次类推,n-1节台阶可以看作n-3和n-2的解的和,n-2可以看作是n-3和n-4的解的和,是一个递归结果。他有很多的入n-2或n-3这样的重叠子问题。
另一个角度来看,爬台阶问题其实就是斐波那契额数列在现实生活中的映射。

import java.util.Arrays;

class Solution {
     
    public int numWays(int n) {
     
        if (n == 0) return 1;
        int[] memo = new int[n + 1];
        Arrays.fill(memo, -1);
        memo[0] = 1;
        memo[1] = 1;
        for (int i = 2; i <= n; i++)
            memo[i] = (memo[i - 1] + memo[i - 2]) % 1000000007;
        return memo[n];
    }
}

你可能感兴趣的:(#,剑指,Offer,刷题,动态规划,leetcode,算法,剑指offer)