Description:
Implement pow(x, n).
Solution:
求x的n次方,注意n取值正负0。
用这个方法可以让时间复杂度是log(n):
pow(x,n)=pow(x,n/2)*pow(x,n/2)
自己写的如下,如果输入是x=0.00000001,n=2^31,就会报错,说超时了。
class Solution {
public:
double myPow(double x, int n) {
if (n==0) return 1;
if (n==1) return x;
if (n==-1) return 1/x;
return myPow(x,n/2)*myPow(x,n-n/2);
}
};
现在也不确定原因,猜测可能是递归过深,栈溢出了?先记录下来。。。
正确的如下:(照着一位大佬改的)
class Solution {
public:
double myPow(double x, int n) {
if (n==0) return 1;
if (n==1) return x;
if (n==-1) return 1/x;
return myPow(x*x,n/2)*(n%2==0?1:n>0?x:(1/x));
}
};