zoukankan      html  css  js  c++  java
  • Pow(x, n)

    题目链接

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

    小结

  • 相关阅读:
    python中字典一键多相同值反转技巧
    win10下安装mysql
    上台阶问题的具体走法用python来实现
    桥接模式
    适配器模式
    多线程中lock的使用
    原型模式
    多线程
    建造者模式
    代理模式
  • 原文地址:https://www.cnblogs.com/multhree/p/10513513.html
Copyright © 2011-2022 走看看