Pow(x, n) - LeetCode

题目链接

Pow(x, n) - LeetCode

注意点

  • 暴力乘n会超时

解法

解法一:递归。折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘。如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值。还有一点需要引起我们的注意的是n有可能为负数。

class Solution {
public:
    double myPow(double x, int n) {
        if(n == 0) return 1;
        double temp = pow(x,n/2);
        if(n%2 == 0) return temp*temp;
        if(n > 0) return temp*temp*x; //n是奇数
        return temp*temp/x;
    }
};

解法二:非递归,让i初始化为n,然后看i是否是2的倍数,是的话x乘以自己,否则res乘以x,i每次循环缩小一半,直到为0停止循环。最后看n的正负,如果为负,返回其倒数。

class Solution {
public:
    double myPow(double x, int n) {
        int i;
        double res = 1.0;
        for(i = n;i != 0;i /= 2)
        {
            if(i%2 != 0) res *= x;
            x *= x;
        }
        if(n > 0) return res;
        else return 1/res;
    }
};

小结

posted @ 2019-03-11 21:56  闽A2436  阅读(232)  评论(0编辑  收藏  举报