Leetcode50-Pow(x,n)

题目:

Implement pow(x, n), which calculates x raised to the power n (xn).

Example 1:
Input: 2.00000, 10
Output: 1024.00000

Example 2:
Input: 2.10000, 3
Output: 9.26100

Example 3:
Input: 2.00000, -2
Output: 0.25000

Note:

  • -100.0 < x < 100.0
  • n is a 32-bit signed integer, within the range [−231, 231 − 1]

思路:

这道题可以采用二分法来做。首先观察n。

  • 如果n%2为0,返回x/2 * x/2。
  • 如果n%2为1,返回x/2 * x/2 * x。
  • 如果n为0,则返回1。因为任何数除了0之外的0次方全为1.
    举例:
    57按照以上原则分解
    53 * 53 * 5
    51 * 51 * 5 * 51 * 51 * 5 *5
    50 * 50 * 5 * 50 * 50 * 5 * 5 * 50 * 50 * 5 * 50 * 50 * 5 * 5 * 5 = 57
    注意:
    如果n为负数,首先按照n的绝对值计算xn再用1除以xn,即最终结果。

代码:

/**
     * Calculating pow(x, n).
     * @param x
     * @param n
     * @return
     */
    public double myPow(double x, int n) {
        if(x == 0){
            return 0.0;
        }
        if(n > 0){
            return Pow(x, n);
        }else{
            return 1 / Pow(x, -n);
        }
    }
    
    private double Pow(double x, int n){
        if(n == 0)
            return 1;
        double mid = Pow(x, n/2);
        if(n%2 == 0){
            return mid * mid;
        }else{
            return mid * mid * x;
        }
    }

你可能感兴趣的:(Leetcode50-Pow(x,n))