题目:
Implement pow(x, n).
思路:
求幂、求平方根等题目的最优解法就是二分了。本题需要注意的地方在于:1)指数为负数的情况;2)指数为0的情况;3)指数为奇数和偶数的不同情况。时间复杂度为O(logn)。
从理论上来讲,Pow(0,0)是没有定义的,下面的代码实际上返回了1。在面试中最好和面试官沟通这种特殊情况如何处理。
代码:
class Solution {
public:
double myPow(double x, int n)
{
return Pow(n < 0 ? 1 / x : x, n);
}
private:
double Pow(double x, int n)
{
if(n == 0) return 1; // special case
else if(n == 1 || n == -1) return x; // base case
double half = Pow(x, n/2);
return half * half * (n % 2 == 0 ? 1 : x);
}
};