/*class Solution {
public:
//超时
double myPow(double x, int n) {
if(n == 0) return (double)1;
int flag = n > 0 ? 1 : -1;
unsigned int absN = n > 0 ? n : -n;
double ans = helper(x, absN);
return flag == 1 ? ans : 1.0 / ans;
}
private:
double helper(double base, unsigned int expo) {
if(expo == 0) return 1;
if(expo == 1) return base;
double ans;
if(expo % 2) {
ans = helper(base, expo / 2) * helper(base, expo / 2) * base;
}
else {
ans = helper(base, expo / 2) * helper(base, expo / 2);
}
return ans;
}
};*/
class Solution {
public:
//快速幂
double myPow(double x, int n) {
if(x == 1 || n == 0) return 1;
double ans = 1;
long num = n;
if(n < 0){
num = -num;
x = 1/x;
}
while(num){
if(num & 1) ans *= x;
x *= x;
num >>= 1;
}
return ans;
}
};
剑指 Offer 16. 数值的整数次方
最新推荐文章于 2022-07-05 22:34:45 发布