题目:
Implement pow(x, n).
思路:
这题考的是用最短的时间来求幂次方。
如果我们用for循环来做,则要做n次乘法,时间复杂度为O(n);
如果我们用二分法来做,即先求pow(x,n/2),在将结果相乘,这样只需分lg(n)次,每次做2次或者3次乘法,时间复杂度为O(lgn)。
注意边界条件,n可以为负值。
实现如下:
class Solution {
public:
double myPow(double x, int n) {
if (x == 0) return 0;
if (n == 0) return 1;
return n > 0 ? pow(x, n) : (1 / pow(x, -n));
}
double pow(double x,int n)
{
if (x == 0) return 0;
if (n == 0) return 1;
double temp = pow(x,n/2);
return (n % 2 == 0) ? (temp*temp) : (temp*temp*x);
}
};