50. Pow(x, n)
Implement pow(x, n).
题目意思:
题目意思很简单,让我们实现一个幂函数,也就是给出
x
和
解题思路:
幂函数是什么我们都很清楚,
xn
表示n个x相乘的结果,最简单粗暴的方法就是写一个循环来将n个x乘起来,但这是低效的,而且这种方法在Leetcode上提交也不会通过。但是,对于n个x,如果我们把这些x分成两部分。
x∗x∗⋯∗xpart1:n2个x∗x∗x∗⋯∗xpart2:n2个x
从上面的式子可以看出,实际上,我们只需要计算一次第一部分的n个x的乘积,后半部分就不用算了,也就是
xn=(xn2)2
按照这中方法,我们可以递归地一直把这些x划分成2部分,每一部分又划分成2部分……直到只剩下1个或0个x,这样就可以开始返回。
代码:
class Solution {
public:
double myPow(double x, int n) {
if (n < 0) {
x = 1 / x;
n = -n;
}
if (n == 0) return 1;
else if (n == 1) return x;
double half = myPow(x, n / 2);
double result;
if (n % 2 == 0) result = half * half;
else result = half * half * x;
// 判断result是否inf,如果是就返回0,否则返回result的值
return result + 1 == result - 1 ? 0 : result;
}
};