LeetCode50. pow(x,n)
题目描述:实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是
[
−
2
31
,
2
31
−
1
]
[−2^{31}, 2^{31 − 1}]
[−231,231−1]。
初步思路:判断n的正负号,如果为0,则为1;如果为负,则x为1/x;如果为正,则x不变。
class Solution {
public double myPow(double x, int n) {
if(n==0)
return 1.00000;
if(n<0)
{
x = 1.0/x;
n = -n;
}
double ret = x;
for(int i=0;i<n-1;i++)
{
ret = ret*x;
}
return ret;
}
}
此解法复杂度过高,当n取最大值当时候会超时;
改进:因此运用折半的思想,每折半一次,作为底数的x都会变为原来的平方,并且还要考虑折半为奇数的情况,当为奇数时,需要额外乘x
class Solution {
public double myPow(double x, int n) {
if(n==0)
return 1.00000;
if(n<0)
{
x = 1.0/x;
n = -n;
}
double ret = 1.0;
for(int i=n;i!=0;i/=2)
{
if(i%2 !=0)
ret = ret*x;
x = x*x;
}
return ret;