数值的整数次幂
1.题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。
2.方法1
1.当base为0时返回0。
2.当exponent为0时返回1。
3.当exponent小于0时返回求幂结果的倒数。
4.当exponent大于0时返回求幂结果。
3.代码
class Solution {
public:
double Power(double base, int exponent) {
if(base == 0){
return 0;
}
if(exponent == 0){
return 1;
}
int e = abs(exponent);
double res = 1;
for(int i = 1;i <= e;++i){
res *= base;
}
return exponent > 0 ? res : 1.0/res;
}
};
4.复杂度分析
时间复杂度:O(exponent)
空间复杂度:O(1)
5.方法2
a
n
=
a
n
/
2
∗
a
n
/
2
,
n
为
偶
数
a^n=a^{n/2}*a^{n/2},n为偶数
an=an/2∗an/2,n为偶数
a
n
=
a
(
n
−
1
)
/
2
∗
a
(
n
−
1
)
/
2
∗
a
,
n
为
奇
数
a^n=a^{(n-1)/2}*a^{(n-1)/2}*a,n为奇数
an=a(n−1)/2∗a(n−1)/2∗a,n为奇数
6.代码
class Solution {
public:
double myPow(double x, int n) {
long N = n;
double res = pow(x, abs(N));
return N > 0 ? res : 1.0 / res;
}
double pow(double x, long N){
if(N == 0){
return 1;
}
if(N == 1){
return x;
}
double res = pow(x, N >> 1);
res *= res;
if(N & 1){
res *= x;
}
return res;
}
};
7.复杂度分析
时间复杂度:O(logn)
空间复杂度:O(1)