Implement pow(x, n).
解题思路:
求浮点数的幂次方,注意可能为负数次幂;
可以使用二分搜索的思想,当n为偶数时,x^n = x^(n/2) * x^(n/2),因此只需要求得一半的幂次方,将结果平方,就得到所求结果。
解题步骤:
1、递归最底层,n == 0 时,返回1;
2、求出t = pow(x, n/2);
3、判断n的奇偶性:
a. 如果奇数,要判断n的符号,n为负数乘以1/x,n为正数时乘以x;
b. 如果偶数,不需要多乘;同时,也不需要判断符号,因为符号形式已经包含在待乘的两个t中;
代码:
1 class Solution { 2 public: 3 double myPow(double x, int n) { 4 if (n == 0) 5 return 1; 6 double t = myPow(x, n / 2); 7 if (n % 2) { 8 return n < 0 ? 1/x*t*t : x*t*t; 9 } else { 10 return t*t; 11 } 12 } 13 };