LeetCode - Pow(x, n)

来源:互联网 发布:c语言考试卷 编辑:程序博客网 时间:2024/06/03 17:58

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

这道题有两种解法,第一种是根据n的每一位来算的。

例如 n = 11时,n=2^3 + 2^1 + 2^0,即看n的每一位是否为1. 此时 res = x^8 * x^2 * x^1 . 即对应于n的每一位的值。

并且对于n的每一位来说,它对应的x^i是它前一位对应的x^j的平方。因为相邻两位的值总是2^t和2^(t-1),所以i = 2j 。

最后实现的代码如下:

    public double pow(double x, int n) {        if(n<0){            x = 1/x;        }        double res = 1.0;        n = Math.abs(n);        while(n>0){            if((n&1) !=0){                res *=x;  //如果n的当前位是1的话,就把这个值乘到结果中            }            x*=x;    //求出当前位对应的x^i的值            n=n>>1;        }        return res;    }

另一种解法是用递归实现的二分法:

    public double pow(double x, int n) {        if(n==0) return 1.0;        if(n<0){            x = 1/x;        }                n = Math.abs(n);                double half = pow(x, n/2);        if(n%2==0) return half*half;        else return half*half*x;            }

LeetCode 在这道题上对边界条件的检查要求不高,关于边界检查,可以看这里:

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

0 0
原创粉丝点击