题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路
这个题初看比较变态,先写出公式。
设
f
(
n
)
f(n)
f(n)表示跳上n级台阶的跳法,
则
f
(
n
)
=
f
(
n
−
1
)
+
f
(
n
−
2
)
+
⋯
+
f
(
1
)
+
1
f(n) = f(n-1)+f(n-2)+\cdots +f(1)+1
f(n)=f(n−1)+f(n−2)+⋯+f(1)+1,加一表示一步登顶。
忽然中学时代的某种记忆开始苏醒,
写出
f
(
n
−
1
)
=
f
(
n
−
2
)
+
f
(
n
−
2
)
+
⋯
+
f
(
1
)
+
1
f(n-1) = f(n-2)+f(n-2)+\cdots +f(1)+1
f(n−1)=f(n−2)+f(n−2)+⋯+f(1)+1。
两式相减得
f
(
n
)
=
2
f
(
n
−
1
)
f(n)=2f(n-1)
f(n)=2f(n−1)。
代码
class Solution {
public:
int jumpFloorII(int number) {
int fNMinusOne = 1;
int fN = 1;
for ( int i = 2; i <= number; ++i ) {
fN = 2 * fNMinusOne;
fNMinusOne = fN;
}
return fN;
}
};