LeetCode ---- 50、Pow(x, n)

题目链接

思路:

首先判断指数是否小于0,若小于0,则最终结果为倒数。

求 m 的 n 次幂,若 n 为偶数,则 m^n = m ^ ( n / 2) * m ^ ( n / 2)= (m ^ 2) ^ (n / 2)

若 n 为奇数,则 m^n = m ^ ( (n - 1) / 2 ) * m ^ ( (n - 1) / 2 )* m = (m ^ 2) ^ ( (n - 1) / 2) * m

利用上面的性质,可写出如下代码:

    public double myPow(double x, int n) {
        if (n == 0) {
            return 1;
        }
        boolean less0 = n > 0 ? false : true;
        double result = 1.0;
        for (int i = n; i != 0; i /= 2) {
            if (i % 2 != 0) {   // 若当前 i 次幂为奇数
                result *= x;   // 单独乘以x
            }
            x *= x;  // 每次都计算 x^2
        }
        return less0 ? (1 / result) : result;
    }

猜你喜欢

转载自blog.csdn.net/sinat_34679453/article/details/106578951