leetcode 50. Pow(x, n)

题目链接

知识点

  • n 的取值可能是正数、0、负数
  • n < 0 时,pow(x, n) 转换为 pow(1/x, -n) 将 n 都换为正数
  • n 的取值范围 [−2^31, 2^31 − 1] ,取最小值的时候 -n 取不到
  • “二分”时间复杂度 logN

代码

class Solution {
public:
    double myPow(double x, int n) {
        
        if(n==0) return 1.0;
        if(n==1) return x;
        
        int t = n / 2; //解决 n 取最小值时 -n 取不到的情况
        if(n < 0){
            
            t = -t;
            x = 1 / x;
        }
        
        double ans = myPow(x, t);
        
        if(n % 2 == 0)    return ans*ans;
        else            return x*ans*ans; //奇数项多乘一次 x
    }
};

你可能感兴趣的:(leetcode 50. Pow(x, n))