leetcode50 快速幂刷题

 

 

 

 

 

 

一开始没有想太多的东西,直接for循环去算了,但是leetcode判的超时,所以被迫去寻找新的算法。

很容易想到,既然O(n)的时间复杂度不行,理应来说应该是logn的时间复杂度。

易想到用的是基础的二分法思想。

 

但是二分法也分很多种,总归是要递归或者递推运算的。

最基本的想法就是,讲一个高次幂逐步转化成逐个更大数的乘积,比如,2^5=4^2*2

利用这种思想方式即可探寻快速幂的基本思想了

 

class Solution {
public:
    double myPow(double x, int n) {
        double result=1;
        int n1=abs(n);
        while(n1>0){
            if(n1&1){//位运算,判断是否为奇数
                result= result*x;
            }
            n1>>=1;//位运算n1/2
            x=x*x;
        }
        if(n>=0)
        return result;
        else 
        return 1/result;
    }
};

 

posted @ 2021-04-20 10:50  奕玑  阅读(58)  评论(0)    收藏  举报