Implement pow(x, n).
Example 1:
Input: 2.00000, 10 Output: 1024.00000
Example 2:
Input: 2.10000, 3 Output: 9.26100
注意corner case很多,
1 如果x == 1.0 或者 n == 0 应该返回1
2如果x= -1.0,n为偶返回1.0, n为奇数返回-1.0,必须先判断,不然n=INT_MIN时会直接返回0
3 n=INT_MIN时,应返回0
4,如果n为负数,就把n置为-n,并把x置为1/x
5 使用递归可以把复杂度降为O(logn)
class Solution {
public:
double myPow(double x, int n) {
if (x == 1.0 || n == 0) return 1;
if (x == -1.0) {
if (n % 2 == 0) return 1.0;
else return -1.0;
}
if (n == INT_MIN) return 0;
if (n < 0) {
n = -n;
x = 1/x;
}
if (n % 2 == 0) return myPow(x * x, n/2);
else return x * myPow(x*x, n/2);
}
};