题目:给定一个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)。
网友评论