469
推荐
/** * 1.全面考察指数
查看全部
编辑于 2015-09-20 14:56:57
回复(139)
70
这个题的难点在于把所有情况都理清楚,并且做到非常的直观。
class Solution {
double power(double base, int exp) {
if (exp == 1) return base;
if ((exp & 1) == 0) {
int tmp = power(base, exp >> 1);
return tmp * tmp;
} else {
int tmp = power(base, (exp - 1) >> 1);
return tmp * tmp * base;
}
}
public:
double Power(double base, int exp) {
if (base == 0) {
if (exp > 0) return 0;
else if (exp == 0) return 0;
else throw invalid_argument("Invalid input!");
} else {
if (exp > 0) return power(base, exp);
else if (exp == 0) return 1;
else return 1 / power(base, -exp);
}
}
};
编辑于 2017-09-07 09:33:34
回复(10)
47
python
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
result = 1
if base == 0:
return 0
if exponent == 0:
return 1
if exponent < 0:
for i in range(-exponent):
result = result * base
return 1/result
for i in range(exponent):
result = result * base
return result 上面的很简单,没有使用快速幂算法,下面使用一下快速幂算法,快速幂算法参考下面的博客
https://blog.csdn.net/hkdgjqr/article/details/5381028
def fast_power(self, base, exponent):
if base == 0:
return 0
if exponent == 0:
return 1
e = abs(exponent)
tmp = base
res = 1
while(e > 0):
#如果最后一位为1,那么给res乘上这一位的结果
if (e & 1 == 1):
res =res * tmp
e = e >> 1
tmp = tmp * tmp
return res if exponent > 0 else 1/res
编辑于 2018-03-25 12:01:54
回复(15)
79
java 实现
传统公式求解时间复杂度O(n)
public class Solution {
public double Power(double base, int exponent) {
double result=1;
for(int i=0;i
result*=base;
}
if(exponent<0){
result=1/result;
}
return result;
}
}
递归:n为偶数,a^n=a^n/2*a^n/2;n为奇数,a^n=(a^(n-1)/2)*(a^(n-1/2))*a
时间复杂度O(logn