剑指Offer Java版 面试题16:数值的整数次方

题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

练习地址

https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00

方法1

public class Solution {
    public double Power(double base, int exponent) {
        if (base == 0) {
            return 0;
        }
        if (exponent == 0) {
            return 1;
        }
        boolean negative = exponent < 0;
        if (negative) {
            exponent = -exponent;
        }
        double result = base;
        while (--exponent > 0) {
            result *= base;
        }
        return negative ? 1 / result : result;
    }
}

复杂度分析

  • 时间复杂度:O(n)。
  • 空间复杂度:O(1)。

方法2

public class Solution {
    public double Power(double base, int exponent) {
        if (base == 0) {
            return 0;
        }
        if (exponent == 0) {
            return 1;
        }
        boolean negative = exponent < 0;
        if (negative) {
            exponent = -exponent;
        }
        double result = powerWithExponent(base, exponent);
        return negative ? 1 / result : result;
    }
    
    private double powerWithExponent(double base, int exponent) {
        if (exponent == 0) {
            return 1;
        }
        if (exponent == 1) {
            return base;
        }
        double result = powerWithExponent(base, exponent >> 1);
        // n为偶数时,a^n=a^(n/2)*a^(n/2);n为奇数时,a^n=a^(n/2)*a^(n/2)*a
        result *= result;
        if ((exponent & 1) == 1) {
            result *= base;
        }
        return result;
    }
}

复杂度分析

  • 时间复杂度:O(logn)。
  • 空间复杂度:O(logn)。

剑指Offer Java版目录
剑指Offer Java版专题

你可能感兴趣的:(剑指Offer Java版 面试题16:数值的整数次方)