题目描述
思路分析
推公式
f
[
i
]
:
跳
到
第
i
级
台
阶
的
方
案
数
f[i]:跳到第i级台阶的方案数
f[i]:跳到第i级台阶的方案数
则
f
[
1
]
=
1
,
f
[
i
]
=
f
[
1
]
+
f
[
2
]
+
.
.
.
+
f
[
i
−
1
]
则f[1]=1,f[i]=f[1]+f[2]+...+f[i-1]
则f[1]=1,f[i]=f[1]+f[2]+...+f[i−1]
所
有
f
[
i
+
1
]
=
f
[
i
]
+
f
[
i
−
1
]
+
f
[
i
−
2
]
+
.
.
.
+
f
[
1
]
=
f
[
i
]
+
f
[
i
]
=
2
∗
f
[
i
]
,
故
f
[
i
]
=
f
[
1
]
∗
2
i
−
1
所有f[i+1]=f[i]+f[i-1]+f[i-2]+...+f[1]=f[i]+f[i]=2*f[i],故f[i]=f[1]*2^{i-1}
所有f[i+1]=f[i]+f[i−1]+f[i−2]+...+f[1]=f[i]+f[i]=2∗f[i],故f[i]=f[1]∗2i−1
代码实现
class Solution {
public:
// f[i]=f[1]+f[2]+...+f[n-1]=s[n-1];
//则f[i+1]=f[i]+f[i-1]+f[i-2]+...+f[1]=2*f[i];
int jumpFloorII(int n) {
int a1=1;
return a1*qmi(2,n-1);
}
int qmi(int a,int b){
int res=1;
while(b){
if(b&1) res=res*a;
a=a*a;
b>>=1;
}
return res;
}
};