--50题 撒花
Implement pow(x, n), which calculates x raised to the power n (xn).
Example 1:
Input: 2.00000, 10 Output: 1024.00000
Example 2:
Input: 2.10000, 3 Output: 9.26100
Example 3:
Input: 2.00000, -2 Output: 0.25000 Explanation: 2-2 = 1/22 = 1/4 = 0.25
Note:
- -100.0 < x < 100.0
- n is a 32-bit signed integer, within the range [−231, 231 − 1]
让你实现pow的函数,也就是指数函数,这里注意指数的范围是INT_MIN 到 INT_MAX,如果直接把负数转换成正数可能会溢出,因为-1*INT_MIN 是比INT_MAX 多一位的,也算是leetcode的老技俩了。
这里用递归实现的,因为一个个乘效率比较低,所以每次都保存一下 x^(n/2)的值
时间复杂度为logN
class Solution {
public:
double myPow(double x, int n) {
if (n == 1)
return x;
if (n == 0)
return 1;
if (n < 0 && x != 0)
{
int c = n / 2;
int i = n % 2;
double s = myPow(1/x, -c);
return s*s*myPow(1/x, -i);
}
else
{
int c = n / 2;
int i = n % 2;
double s = myPow(x, c);
return s*s*myPow(x, i);
}
}
};
哦,别忘了 x的0次方是1这种情况