重做剑指offer(九)——变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析:这题与上题同理,我们也可以用同样的思路来解决,设n阶台阶有f(n)种跳法,若第一次跳1阶,那后面还有f(n-1)种跳法,若第一次跳2阶,后面还有f(n-2)种跳法,……若第一次跳n-1阶,则还有f(1)种跳法,若第一次跳n阶,则还有f(0)种跳法。用公式表达,也就是
f
(
n
)
=
f
(
n
−
1
)
+
f
(
n
−
2
)
+
…
…
+
f
(
1
)
+
f
(
0
)
f(n) = f(n-1)+f(n-2)+……+f(1)+f(0)
f(n)=f(n−1)+f(n−2)+……+f(1)+f(0)
其中
f
(
1
)
=
1
f(1) =1
f(1)=1 ,
f
(
0
)
=
1
f(0) =1
f(0)=1 ;
将
f
(
n
−
1
)
=
f
(
n
−
2
)
+
f
(
n
−
3
)
+
…
…
+
f
(
1
)
+
f
(
0
)
f(n-1) = f(n-2)+f(n-3)+……+f(1)+f(0)
f(n−1)=f(n−2)+f(n−3)+……+f(1)+f(0)
f
(
n
−
2
)
=
f
(
n
−
3
)
+
f
(
n
−
4
)
+
…
…
+
f
(
1
)
+
f
(
0
)
f(n-2) = f(n-3)+f(n-4)+……+f(1)+f(0)
f(n−2)=f(n−3)+f(n−4)+……+f(1)+f(0)
……
代入f(n),得到
f
(
n
)
=
2
n
−
1
f(n) = 2^{n-1}
f(n)=2n−1
所以,该题答案如下:
public class Solution {
public int JumpFloorII(int target) {
return (int)Math.pow(2,target-1);
}
}
知识点总结:多观察,多思考。
(要去做笔试题了,这次先写到这里)