leetcode 50. Pow(x, n)

Posted Joel_Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 50. Pow(x, n)相关的知识,希望对你有一定的参考价值。

 

 递归:

class Solution {
public:
    double myPow(double x, int n) {
        if(n==0) return 1;
        if(n<0)
            return 1/myPow(x,-n);
        if(n&1==0)
            return myPow(x*x,n/2);
        return x*myPow(x,n-1);
    }
};

 迭代:

class Solution {
public:
    double myPow(double x, int n) {
        double res=1.0;
        int p=n;
        while(p){
            if(p&1==1)
                res*=x;
            p/=2;if(p==0) break;
            x*=x;
        }
        return n>0?res:1/res;
    }
};

这道题目应该使用迭代方法,因为使用递归方法会出现stack overflow(并不是说递归的代码是错误的,事实上递归的代码大多数样例可以正确运行)

正确的递归如下:

/**
递归法:O(logn)
**/
class Solution {
public:
    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;
        }
    }
};

 

 

以上是关于leetcode 50. Pow(x, n)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode50. Pow(x, n)(快速幂)

LeetCode50. Pow(x, n)(快速幂)

LeetCode50 Pow(x, n)

LeetCode50. Pow(x, n)

[LeetCode] 50. Pow(x, n)

leetcode || 50Pow(x, n)