lurenaa的博客

注意边界情况:当n==INT_MIN时,-INT_MIN超出范围了,要改为INT_MAX,
又因为存在(-1,-INT_MIN)这个特殊情况存在,考虑到正负修正为INT_MAX-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
double myPow(double x, int n) {
if(n < 0)
return myPow(1 / x, n == INT_MIN ? INT_MAX - 1: -n);
return fast(x, n);
}
double fast(double x, int n) {
if(n == 0)
return 1;
double half = fast(x, n /2);
if(n % 2) {
return half*half*x;
}
return half*half;
}
};

Accepted

304/304 cases passed (4 ms)

Your runtime beats 71.28 % of cpp submissions

Your memory usage beats 57.93 % of cpp submissions (8.3 MB)