LeetCode 50. Pow(x, n)

Implement pow(x, n).
Example 1:

Input: 2.00000, 10
Output: 1024.00000
Example 2:

Input: 2.10000, 3
Output: 9.26100

解析:
通过递归法,采用分治的思想,根据公式如果n是偶数\(x^{2n}=x^{n}x^{n}\),如果n是奇数,则有\(x^{2n+1}=x^n*x^n*x\)
通过递归推导,我们不必将x相乘n次,只需要logN次就可以了。
时间 O(logN) 空间 O(logN)

具体代码如下:

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);
    }
};

执行效果

非递归版本

class Solution {
public:
    double myPow(double x, int n) {
        double result = 1;
        unsigned long long p;
        if(n < 0)
        {
            long long temp = n;
            p = -temp;
            x = 1/x;
        }else
            p = n;
        while(p)
        {
            if(p%2==1)
                result *= x;
            x *=x;
            p/=2;
        }
        return result;
    }
};

Add a Comment

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据