一、题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:2
示例 2:
输入:n = 7
输出:21
示例 3:
输入:n = 0
输出:1
提示:
0 <= n <= 100
二、分析与代码
通过分析,找递推公式:dp[i]表示上到第i层楼梯有多少种解法,dp[0] = 1; dp[1] = 1; dp[2] = 2; dp[3] = 3; dp[4] = 5;
可以得到递推公式为dp[i] = dp[i-1] + dp[i-2],题型和“斐波那契数”相同,参考博客:剑指 Offer 10- I. 斐波那契数列 - 湘summer - 博客园 (cnblogs.com)
1.动态规划:
class Solution { public int numWays(int n) { int[] dp = new int[101]; dp[0]=1; dp[1]=1; dp[2]=2; for(int i=2;i<=n;i++){ dp[i] = (dp[i-1]+dp[i-2])%1000000007; } return dp[n]; } }
2.滚动数组:
class Solution { public int numWays(int n) { if(n==0||n==1) return 1; int p=1,q=1,t=0; for(int i=2;i<=n;i++){ t=(p+q)%1000000007; p=q; q=t; } return t; } }
标签:10,台阶,示例,int,Offer,II,dp From: https://www.cnblogs.com/lxpblogs/p/16622385.html