剑指 Offer 16. 数值的整数次方
思路:二分法
考虑n<0的情况,如果n<0&&n==INT_MIN,则需要对n进行处理;否则正常取反
当n>0时,如果n能被2整除,对n进行二分;否则进行减一操作
class Solution {
public:
double myPow(double x, int n) {
if(n==0) return 1;
if(n<0){
if(n==INT_MIN) return myPow(1/x,-(n+1))*1/x;
else
return myPow(1/x,-n);
}
else{
if(n%2==0) return myPow(x*x,n/2);
else return myPow(x,n-1)*x;
}
}
};
时间复杂度 O(logn)
空间复杂度 O(logn)