LetCode 50. Pow(x, n)

static int x=[](){
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    return 0;
}();
// 普通解法,超时
// class Solution {
// public:
//     double myPow(double x, int n) {
//         if (x == 0)
//             return 0;
//         if (n == 0)
//             return 1;
//         double res = x;
//         double r = n;
//         for (int i = 1; i < fabs(r); i++)
//             res *= x;
//         if (n < 0)
//             res = 1 / res;
//         return res;
//     }
// };

//O(log(n))
class Solution {
public:
    double myPow(double x, int n) {
        if (n == 0)
            return 1;
        if (n > 0)
            return solve(x, n);
        else
            return 1.0 / solve(x, -n);
    }
    // 二分法求解
    double solve(double x, int n){
        if (n == 0)
            return 1.0;
        double res = solve(x, n / 2);
        
        if (n % 2 == 0)
            return res * res;
        else
            return res * res * x;
    }
};

猜你喜欢

转载自blog.csdn.net/wbb1997/article/details/80988470