50. Pow(x, n) - LeetCode

50. Pow(x, n)

题目链接

快速幂

  • 当n为偶数时,xn = (x * x) n/2 ;当n为奇数时,xn = (x * x) n/2 * x
  • 通过循环迭代,直至n为0
  • 注意以下两点:
    • 题目中n可能为负数,需要先取绝对值运算,最后结果再取倒数
    • 对于Java中的Math.abs(int a)方法,如果a为Integer.MIN_VALUE,取绝对值就会超出int的范围,因此会保持不变;所以我们需要转成long类型进行运算
class Solution {
    public double myPow(double x, int n) {
        double ans = binaryPow(x, Math.abs((long)n));
        if(n < 0) ans = 1.0 / ans;
        return ans;
    }
    private double binaryPow(double x, long n){
        double ans = 1;
        while(n > 0){
            if((n & 1) == 1) ans = ans * x;
            x = x * x;
            n >>= 1;
        }
        return ans;
    }
}
posted @ 2021-03-08 15:04  一天到晚睡觉的鱼  阅读(50)  评论(0编辑  收藏  举报