题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
首先是自己的常规解法:乘以exponent次,若exponent值小于0,则取倒数即可。
public class Solution {
public double Power(double base, int exponent) {
if (exponent == 0)
{
return 1;
}
if (exponent == 1)
{
return base;
}
if (base == 0 && exponent < 0)
{
throw new RunTimeException();
}
double result = 1.0;
int absExp = Math.abs(exponent);
while(absExp >= 1)
{
result *= base;
absExp -= 1;
}
if (exponent < 0)
return 1/result;
return result;
}
思路二:递归
public class Solution {
public double Power(double base, int exponent) {
//double result = 1.0;
if (exponent == 0)
return 1.0;
if (exponent == 1)
return base;
if(exponent > 1)
return base * Power(base, exponent-1);
else
{
return (1/base) * Power(base, exponent+1);
}
}
}
思路三:复杂度为log(n)的快幂算法:参考别人的博客,链接如下:
public class Solution {
public double Power(double base, int exponent) {
if(exponent == 0)
return 1;
int absExp = Math.abs(exponent);
double result = 1.0;
while(absExp != 0)
{
if ((absExp & 1) == 1)
result *= base;
base *= base;//每次都会用base*base,即使二进制的absExp中存在0
absExp>>=1;//正数右移,补入的数为0;负数右移,补入的数为1.所以要用绝对值
}
if (exponent < 0)
return 1/result;
else
return result;
}
}