题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路
这道题其实是一个数学问题。
我们不难得出第n阶跳法的值为前n-1项值的和,而第一节台阶只有1种情况,即
f
i
b
(
n
)
=
∑
2
<
i
<
n
f
i
b
(
i
)
+
1
;
fib(n) = \sum_{2<i<n} fib(i) + 1;
fib(n)=2<i<n∑fib(i)+1;
同理也可以推出第n-1阶台阶时的计算公式,即
f
i
b
(
n
−
1
)
=
∑
2
<
i
<
n
−
1
f
i
b
(
i
)
+
1
;
fib(n - 1) = \sum_{2<i<n - 1} fib(i) + 1;
fib(n−1)=2<i<n−1∑fib(i)+1;
等式两边相减,可得
f
i
b
(
n
)
=
{
1
,
n
=
1
2
∗
f
i
b
(
n
−
1
)
,
n
>
1
fib(n) = \begin{cases} 1,\quad n=1\\ 2 * fib(n - 1), \quad n > 1 \end{cases}
fib(n)={1,n=12∗fib(n−1),n>1
也就相当于
f
i
b
(
n
)
=
2
n
−
1
fib(n) = 2^{n-1}
fib(n)=2n−1
代码实现
public class Solution {
public int JumpFloorII(int target) {
return 1<<(target - 1);
}
}