注意边界情况:当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)