Leetcode50.Pow(x,n)

快速幂
注意代码
double y = myPow(x, n / 2);
return y * y;

而非
return myPow(x,n/2)
后者会使时间复杂度从O(logN)增至O(N)
时间复杂度:O(logN)
C++代码

class Solution {
public:
    double myPow(double x, int n) {
        if (!n)
            return 1;
        if (x == 1)
            return 1;
        else if (x == 0)
            return 0;
        else if (x == -1)
            if (n % 2)
                return -1;
            else
                return 1;
        else if (n == 0)
            return 1.0;
        else if (n > 0)
        {
            if (n == 1)
            {
                return x;
            }
            else if (!(n % 2))
            {
                double y = myPow(x, n / 2);
                return y * y;
            }
            else
            {
                double y = myPow(x, (n - 1) / 2);
                return y * y * x;
            }
        }
        else
        {
            if (n == INT_MIN)
                return 1.0 / (myPow(x, -(n + 1))*x);
            return 1.0 / myPow(x, -n);
        }
    }
};

猜你喜欢

转载自blog.csdn.net/qq_42263831/article/details/82724998