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;
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容