码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]50 Pow(x, n)

时间:2015-01-03 13:20:11      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:leetcode

https://oj.leetcode.com/problems/powx-n/

http://blog.csdn.net/linhuanmars/article/details/20092829

public class Solution {
    public double pow(double x, int n) {
        // Solution A:
        // return pow_Recursion(x, n);
        
        // Solution B:
        return pow_Shift(x, n);
    }
    
    ////////////////////////
    // Solution B: Number
    //
    // Any num can be represented by 2.
    private double pow_Shift(double x, int n)
    {
        if (x == 0)
            return 0d;

        if (n == 0)
            return 1d;
            
        boolean neg = n < 0;
        n = Math.abs(n);
        
        double r = 1d;
        while (n > 0)
        {
            if (n % 2 == 1)
                r *= x;
            x *= x;
            n = n >> 1;
        }
        
        if (neg)
            return 1 / r;
        return r;
    } 
        
    ////////////////////////
    // Solution A: Recursion
    //
    private double pow_Recursion(double x, int n)
    {
        // x ^n = 
        // x ^ (n / 2) * x (n / 2) * x (n % 2)
        if (x == 0)
            return 0;

        if (n > 0)
            return p(x, n);
        else
            return 1 / p(x, -n);
    }
    
    private double p(double x, int n)
    {
        if (n == 0)
            return 1;
        
        double v = p(x, n / 2);
        if (n % 2 == 0)
            return v * v;
        else 
            return v * v * x;
    }
}



[LeetCode]50 Pow(x, n)

标签:leetcode

原文地址:http://7371901.blog.51cto.com/7361901/1598627

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!