题目描述
一天一只顽猴想要从山脚爬到山顶,
途中经过一个有n个台阶的阶梯,
但是这个猴子有个习惯,每一次只跳1步或3步
试问?猴子通过这个阶梯有多少种不同的跳跃方式
输入描述
输入只有一个数n, 0 < n < 50
代表此阶梯有多个台阶
输出描述
有多少种跳跃方式
示例一
输入
50
输出
122106097
示例二
输入
3
输出
2
注意项-爬楼梯问题
这道题最主要就是找规律
爬楼梯问题,一次爬m步或z步,总共n个台阶(n>m&&n>z)
公式:dp[n]=dp[n-m]+[n-z]
代入到本题,就是: fn = fn-1 + fn-3
那这个结论怎么得出来的呢
设n=30,上山最后一步到达第30级台阶,完成上山,共有f[30]种不同的爬法;到第30级之前位于哪一级呢?第一种是位于第29级(上跳1级即到),有f[29]种;第二种于第27级(上跳3级即到),有f[27]种;于是有:
f[30]=f[29]+f[27]
依此类推,一般地有递推关系:
f[n]=f[n-1]+f[n-3] (n>3)
看懂了吗,看不懂那就来看看实例吧
台阶n | 上楼梯方式【1为跳一步;3为走三步】 | 上楼梯方式总次数fn | 关系 |
---|---|---|---|
1 | 1 | 1 | f[1] |
2 | 1、1 | 1 | f[2] |
3 | 1、1、1;3 | 2 | f[3] |
4 | 1、1、1、1;3、1; 1、3 | 3 | f[4]=f[3]+f[1] |
5 | 1、1、1、1、1;3、1、1; 1、3 、1 1、1、3 | 4 | f[5]=f[4]+f[2] |
6 | 1、1、1、1、1、1;3、1、1、1; 1、3 、1、1 ; 1、1、3、1; 1、1、1、3;3 、3 | 6 | f[6]=f[5]+f[3] |
看完这个列表是不是清楚了很多
解题思路
递归也好、标下标也好、变量赋值也好大体思路如下:
- 先判断n的值,若为1、2、3,则固定输出1或2,若大于3,则进行 f[n]=f[n-1]+f[n-3] 公式的套用
- 进行数据迭代