美文网首页剑指 Offer Java版
剑指Offer Java版 面试题16:数值的整数次方

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

作者: 孙强Jimmy | 来源:发表于2019-07-13 16:02 被阅读475次

题目:给定一个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:数值的整数次方

    本文链接:https://www.haomeiwen.com/subject/iflmkctx.html