leetcode50 Pow(x, n)

来源:互联网 发布:涂师傅数据恢复注册码 编辑:程序博客网 时间:2024/06/05 04:00

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;    }};



0 0
原创粉丝点击