问题描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
求解思路
该题目肯定不能用递归求解和组合路径的方式。结合前一个题目的斐波那契思想,我们需要写出递推表达式:
假设
f
(
n
)
f(n)
f(n)是走到第
n
n
n个台阶花费的步数,那么前一个台阶号总共有
n
−
1
n-1
n−1中可能
(1)
f
(
n
)
=
f
(
n
−
1
)
+
f
(
n
−
2
)
+
⋯
+
f
(
2
)
+
f
1
f(n)=f(n-1)+f(n-2)+\cdots+f(2)+f1 \tag{1}
f(n)=f(n−1)+f(n−2)+⋯+f(2)+f1(1)
同样的:
(2)
f
(
n
−
1
)
=
f
(
n
−
2
)
+
f
(
n
−
3
)
+
⋯
+
f
(
2
)
+
f
1
f(n-1)=f(n-2)+f(n-3)+\cdots+f(2)+f1 \tag{2}
f(n−1)=f(n−2)+f(n−3)+⋯+f(2)+f1(2)
(
2
)
−
(
1
)
⇒
f
(
n
)
=
2
×
f
(
n
−
1
)
(2)-(1)\Rightarrow f(n)=2\times f(n-1)
(2)−(1)⇒f(n)=2×f(n−1)
本质上是一个动态规划!!
代码实例
class Solution {
public:
int jumpFloorII(int number) {
if(number == 1) {
return 1;
}
int n = 1;
for(int i = 2; i <= number; ++i) {
n *= 2;
}
return n;
}
};