涉及的知识点
数学
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。
输入:
2.00000,3
输出:
8.00000
解题思路
底数的指数次方相当于指数个底数(或底数倒数)相乘
时间复杂度O(n),空间复杂度O(1)
①:特殊情况一:底数为0,指数不为0时,返回0;特殊情况二:底数不为0,指数为0时,返回1;
②:当指数为正数时,返回的是指数个底数相乘的结果
③:当指数为负数时,返回的是指数个底数的倒数相乘的结果
暴力法
代码
public class Solution {
public double Power(double base, int exponent) {
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
if(exponent<0){
exponent=-exponent;
base = 1/base;
}
double result=1;
for(int i=0;i<exponent;i++){
result*=base;
}
return result;
}
}
解题思路
递归快速幂.
代码
public class Solution {
public double Power(double base, int exponent) {
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
if(exponent<0){
exponent=-exponent;
base = 1/base;
}
double temp = Power(base,exponent/2);
if(exponent%2==0){
return temp*temp;
}
return temp*temp*base;
}
}