使用快速幂的方法求幂,将幂n换位2进制去求解。
如果用暴力求解的话是O(n),因为是一个x一个x乘的(一次跳一步),而转换成二进制会使每次跳的步数越来越大。时间复杂度优化为O(logn)
class Solution {
public:
double myPow(double x, int n) {
// 用二进制的思路更好理解
long ln = n;
if(ln<0){
ln = -ln;
x = 1 / x;
}
double res = 1;
while(ln){
if(ln%2==1) res *= x;
x *= x;
ln /= 2;
}
return res;
}
};