Leetcode:50. Pow(x, n)

Description

Implement pow(x, n).

思路

  • 一年前的代码4ms,现在12ms,不得不感叹大佬们的成长速度有点可怕。。
  • 提供一个大佬没有递归的思路

代码

  • 递归
class Solution {
public:
    double myPow(double x, int n) {
        if(n == 0) return 1.0;
        
        if(n < 0){
            if(n == INT_MIN)
                return (1.0 / (myPow(x, INT_MAX) * x));
            else
                return (1.0 / myPow(x, -n));
        }
        
        double half = myPow(x, n >> 1);
        if(n % 2 == 1){
            return half * half * x;
        }
        else return half * half;
    }
};
class Solution {
public:
    double myPow(double x, int n) {
        if(n == 0) return 1.0;
        
        double ans = 1;
        
        if(n < 0){
            x = 1.0 / x;
            if(n == INT_MIN){
                ans *= x;
                n = INT_MAX;
            }
            else
                n = -n;
        }
        
        while(n){
            if(n & 1)
                ans *= x;
            x *= x;
            n >>= 1;
        }
       
       return ans;
    }
};
posted @ 2017-05-13 11:01  JeffLai  阅读(137)  评论(0编辑  收藏  举报