50. Pow(x, n)

作者: 番茄晓蛋 | 来源:发表于2017-06-11 09:28 被阅读3次

    Implement pow(x, n).

    Hide Company Tags
    LinkedIn Google Bloomberg Facebook
    Hide Tags
    Binary Search Math
    Hide Similar Problems
    (E) Sqrt(x) (M) Super Pow

    ** 解题思路 **
    这道题有几种解题思路。 主要思想是用二分查找来做, 需要区分n < 0, n %2 == 1 or n % 2 == 0 几种情况。 例如,

    2 ^ 5  = 2 * myPow( 2 * 2 , 5/2)  
    2 ^ 4 =  myPow(2 * 2 ,  4/ 2)
    

    当然如果用暴力做法 return x * x * x ... * x (n 个x 相乘) 会造成leetcode oj报错。
    下面是五种写法,仅供参考。

    5 solutions for pow(x, n)

    1. nest myPow
    double myPow(double x, int n) {
        if(n<0) return 1/x * myPow(1/x, -(n+1));
        if(n==0) return 1;
        if(n==2) return x*x;
        if(n%2==0) return myPow( myPow(x, n/2), 2);
        else return x*myPow( myPow(x, n/2), 2);
    }
    
    1. double myPow
    double myPow(double x, int n) { 
        if(n==0) return 1;
        double t = myPow(x,n/2);
        if(n%2) return n<0 ? 1/x*t*t : x*t*t;
        else return t*t;
    }
    
    1. double x
    double myPow(double x, int n) { 
        if(n==0) return 1;
        if(n<0){
            n = -n;
            x = 1/x;
        }
        return n%2==0 ? myPow(x*x, n/2) : x*myPow(x*x, n/2);
    }
    
    1. iterative one
    double myPow(double x, int n) { 
        if(n==0) return 1;
        if(n<0) {
            n = -n;
            x = 1/x;
        }
        double ans = 1;
        while(n>0){
            if(n&1) ans *= x;
            x *= x;
            n >>= 1;
        }
        return ans;
    }
    
    1. bit operation
      see this solution
      If you have other ideas, please leave it below. Thanks.

    相关文章

      网友评论

      • 九色喵::sunflower::sunflower::ghost::ghost::blossom::blossom:😀😀🌹
        不明觉厉
        番茄晓蛋:我刚刚更新啦。 主要思想就是二分查找,把n 降低成 n /2 然后递归调用myPow 即可。谢谢你的回复。
        :smile:

      本文标题:50. Pow(x, n)

      本文链接:https://www.haomeiwen.com/subject/qnthqxtx.html