首页 > 其他 > 详细

leetcode50 快速幂刷题

时间:2021-04-20 14:12:27      阅读:27      评论:0      收藏:0      [点我收藏+]

 

 

 

 

技术分享图片

 

 

一开始没有想太多的东西,直接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;
    }
};

 

leetcode50 快速幂刷题

原文:https://www.cnblogs.com/director-yu-youki/p/14680093.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!