模板代码
public static int ex(int a,int n){
if(n==1){
return a;
}
int res=1;
int exponent=1;
int temp=a;
while((exponent<<1)<n){
temp=temp*temp;
exponent=exponent<<1;
}
res=res*ex(a,n-exponent);
return res*temp;
}
升级版(可以判断负几次方)
class Solution {
public double myPow(double x, int n) {
if(n<0) {
n=-n;
if(n==1) {
return 1/x;
}
double res=1;
double temp=1/x;
int exponent=1;
while((exponent<<1)<n) {
temp=temp*temp;
exponent=exponent<<1;
}
res=res*myPow(1/x,n-exponent);
return res*temp;
}
else {
if(n==1) {
return x;
}
double res=1;
double temp=x;
int exponent=1;
while((exponent<<1)<n) {
temp=temp*temp;
exponent=exponent<<1;
}
res=res*myPow(x,n-exponent);
return res*temp;
}
}
}
剑指 Offer 16. 数值的整数次方
使用升级版的代码可以通过300的测试案例,还有几个会超时,将会继续学习优化
562

被折叠的 条评论
为什么被折叠?



