Leetcode 50. Pow(x, n)

来源:互联网 发布:手机淘宝没有社区 编辑:程序博客网 时间:2024/06/05 17:47
class Solution {public:    double myPow(double x, int n) {        if (n == 0) return 1;        if (n == INT_MIN) return 1 / (x * myPow(x, -(INT_MIN + 1)));        int exp = 1;        double ret = x;        while (exp <= n / 2) {                        exp *= 2;            ret *= ret;        }        return (n < 0) ? 1 / (ret * myPow(x, -n - exp)) : ret * myPow(x, n - exp);    } };
class Solution {public:    double myPow(double x, int n) {        if (n == 0) return 1;        if (n == INT_MIN) return 1 / (x * myPow(x, -(INT_MIN + 1)));        int exp = 0;        double ret = 1;        // n >= 2        int absn = abs(n);        while (absn - exp >= 2) {            // tmpe value            double rt = x;            int et = 1;            while (et  <= (absn - exp) / 2) {                            et *= 2;                rt *= rt;            }            exp += et;            ret *= rt;        }        if (absn - exp == 1) ret *= x;        return (n < 0) ? 1 / ret : ret;    } };

参考后

class Solution {public:    double myPow(double x, int n) {        if (n == 0) return 1;        double t = myPow(x, n / 2);        if (n % 2 ) {            if (n < 0) {                  return 1 / x * t * t;            } else                 return x * t * t;        }         // n % 2 == 0        return t * t;    } };

用动态规划应该速度上会快

这里写代码片
原创粉丝点击