题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:
例如,跳上一个6级台阶台阶,有多少种跳法;由于青蛙一次可以跳两阶,也可以跳一阶,所以我们可以分成两个情况
1、青蛙最后一次跳了两阶,问题变成了“跳上一个4级台阶台阶,有多少种跳法”
2、青蛙最后一次跳了一阶,问题变成了“跳上一个5级台阶台阶,有多少种跳法”
由上可得f(6) = f(5) + f(4);
故递推表达式为:f(n) = f(n - 1) + f(n - 2)
C++
class Solution {
public:
int jumpFloor(int number) {
if (number == 1) return 1;
if (number == 2) return 2;
vector<int>f{0, 1, 2}; //0为占位,1 2 为初始条件,这里与斐波那契的代码不同,见下链接
int temp;
for (int i = 3; i <= number; i++)
{
temp = f[i - 1] + f[i - 2]; //跳台阶的递推表达式
f.push_back(temp);
}
return f[number];
}
};
此题代码解法与求斐波那契数列一致:
剑指offer:斐波那契数列(C++/Python)