今天的有氧运动训练内容是在一个长条形的平台上跳跃。平台有 num 个小格子,每次可以选择跳 一个格子 或者 两个格子。请返回在训练过程中,学员们共有多少种不同的跳跃方式。

结果可能过大,因此结果需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

**输入:**n = 2
**输出:**2

示例 2:

**输入:**n = 5
**输出:**8

提示:

0 <= n <= 100

动态规划,当前状态只与前两个状态有关,所以可以只保留两个状态

sum 表示状态i,a表示状态i-2,b表示状态i-1

设a=1,b=1,直接从dp[2]开始计算,计算num次dp[num+1]计算结束,a更新为dp[num],b更新为dp[num+1]

最后返回a即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
int trainWays(int num) {
int mod = 1000000007;
int a = 1, b = 1, sum = 0;
// dp[n] = dp[n-2]+dp[n-1]
for (int i = 0; i < num; i++) {
sum = (a + b) % mod;
a = b;
b = sum;
}
return a;
}
};