50. Pow(x, n)

来源:互联网 发布:马士兵java 百度云 编辑:程序博客网 时间:2024/06/10 22:11

中心思想并不难,递归相乘就可以了,主要是对一些特殊情况的考虑。

1、n=0

2、n=INT_MAX

3、n=INT_MIN

4、n<0

递归的复杂度为ON,采用二分法可以把复杂度降到OlogN

class Solution {public:        double myPow(double x, int n) {                double res=1.0;//这里要定义成double啊喂        if(n==INT_MIN){            if(x==1) return x;            else if(x==-1) return -x;            else return 0;        }//一开始只用INT_MAX判断,2,2147483648这个测试用例怎么都过不了,后来想想,因为2147483648不管正还是负都是INT_MIN啊                if(n==INT_MAX){            if(x==1||x==-1) return x;            else return 0;        }        if(n==0)  return 1.0;//考虑n=0的情况          if(n<0)  return 1.0/pow(x,-n);//考虑n<0的情况            double half=pow(x,n>>1);//将复杂度从O(N)降到O(log(N)        if(n%2==0) return half*half;        else return half*half*x;    }};


0 0
原创粉丝点击