您的位置:首页 > 其它

leetcode50 Pow(x, n)

2016-03-06 03:22 267 查看

50. Pow(x, n)

Total Accepted:
83619
Total Submissions:
299730
Difficulty: Medium
Implement pow(x, n).

二分法求快速幂,时间复杂度为O(logn)。

测试数据有各种负数,真是醉了

最初的AC代码:

class Solution {
public:
    double myPow(double x, int n) {
        
        if (0 == n || 1 == x) return 1;
        if (-1 == x) {
            if (n & 1)
                return -1;
            return 1;
        }
        if (-2147483648 == n) return 0;
        
        double ret = 1;
        int k = abs(n);
        while (k) {
            if (k & 1) {
                ret *= x;
            }
            x *= x;
            k >>= 1;
        }
        if (n > 0) return ret;
        return 1 / ret;
    }
};

改进后的AC代码:

class Solution {
public:
double myPow(double x, int n) {

if (0 == n) return 1;
if (INT_MIN == n) n += 2; //n绝对值比较大,加2避免溢出,也无伤大雅

double ret = 1;
int k = abs(n);
while (k) {
if (k & 1) {
ret *= x;
}
x *= x;
k >>= 1;
}
if (n > 0) return ret;
return 1 / ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: