Leetcode_powx-n(c++ and python version)

来源:互联网 发布:系统还原会丢失数据 编辑:程序博客网 时间:2024/06/02 04:20
地址:http://oj.leetcode.com/problems/powx-n/
Implement pow(xn).
思路:TLE和WA了好几次。
参考代码:
优化后c++代码:
class Solution {public:    double pow(double x, int n) {        double ans = 1;        bool flag = true;        if (n < 0) {            flag = false;            n = -n;        }        while (n) {            if (n % 2 != 0) {                ans *= x;            }            x *= x;            n /= 2;        }        if (flag) {            return ans;        }        return 1.0 / ans;    }};

python 代码1:利用a^n = a^n/2 * a^n/2
class Solution:    # @param x, a float    # @param n, a integer    # @return a float    def pow(self, x, n):        if not n: return 1        if n == 1: return x        flag = True        if n < 0:            flag = False            n = -n        ans = 1.0        while n:            if n & 0x1:                ans *= x            x *= x            n /= 2        if flag:            return ans        else:            return 1.0 / ans

python代码2:
class Solution:    # @param x, a float    # @param n, a integer    # @return a float    def pow(self, x, n):        if not n: return 1        if n == 1: return x        flag = True        if n < 0:            flag = False            n = -n        ans = 1.0        cnt = 0        while cnt < n:            tmpow = 1            tmpans = x            while cnt+tmpow*2 <= n:                tmpow *= 2                tmpans *= tmpans            cnt += tmpow            ans *= tmpans        if flag:            return ans        else:            return 1.0 / ans


0 0