题目:
实现 pow(x, n) ,即计算 x
的整数 n
次幂函数(即,xn
)。
示例一:
输入:x = 2.00000, n = 10
输出:1024.00000示例二:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
解题思路:
最简单的实现方式就是对x进行累乘,乘n此,时间复杂度为O(N)
再升级一点就是采用快速幂算法,例如要计算2^10,可以从2^5得来, 2^5×2^5=2^10
但是需要分偶数还是奇数,当n为奇数时,还要多乘一个x
当n是负数时,我们可以计算-n次幂,然后再对结果进行改变,用1除以这个结果。
源代码如下:
class Solution {
public:
double mul(double x,long long N)
{
if(N==0) return 1.0;//当N为0时,跳出本层递归
double y=mul(x,N/2);//对N/2,继续递归
//当N为 奇数时,还需要乘上一个x
return N%2==0?y*y:y*y*x;
}
double myPow(double x, int n) {
//之所以用long long类型,是因为放置INT_MAX、INT_MIN的溢出问题
long long N=n;
//N为正数,直接进行递归
//N为负数,对-N次幂进行递归,并且用1除以结果
return N>0?mul(x,N):1/mul(x,-N);
}
};