题目链接
知识点
- n 的取值可能是正数、0、负数
- n < 0 时,
pow(x, n)
转换为pow(1/x, -n)
将 n 都换为正数 - n 的取值范围 [−2^31, 2^31 − 1] ,取最小值的时候 -n 取不到
- “二分”时间复杂度 logN
代码
class Solution {
public:
double myPow(double x, int n) {
if(n==0) return 1.0;
if(n==1) return x;
int t = n / 2; //解决 n 取最小值时 -n 取不到的情况
if(n < 0){
t = -t;
x = 1 / x;
}
double ans = myPow(x, t);
if(n % 2 == 0) return ans*ans;
else return x*ans*ans; //奇数项多乘一次 x
}
};