JZ71 跳台阶扩展问题
JZ71 跳台阶扩展问题
描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
数据范围:$1≤n≤20$
进阶:空间复杂度 $O(1)$ , 时间复杂度 $O(1)$
示例1
1 | 输入:3 |
示例2
1 | 输入:1 |
题解
首先,根据跳台阶基础版,考虑最后一次跳了几阶,从一阶开始,最后跳一阶的话$dp[i-1]$种跳法,跳两阶则有$dp[i-2]$种,以此类推则可以分析出$dp[i]=1(直接跳i阶)+dp[i-1]+dp[i-2]+……+dp[1]$同时$dp[1] = 1,dp[2]=2$,由此我们就可以进行递归了。
递归代码
1 | class Solution { |
优化:当然从递推公式也可以看出来这个实际上是可以求和的,即是直接求$dp[i]$。
$$
a_i = 1+s_{i-1}\
a_{i+1} = 1+s_{i}
$$
由此可得
$$
a_{i+1}-a_{i} = a=i 即a{i+1} = 2a_i
$$
所以$dp[i]$是一个等比数列,求第n项的方法就是$2^{n-1}*a_1$
代码
1 | class Solution { |