leetcode算法题目---求整数的幂运算(二分递归)

这是最近刷到的一道题目,看似简单,但是这个不允许调用库函数,相当于手写库函数,首先想到暴力循环,可是这个方法时间复杂度太高,系统上过不去,哈哈哈。解题技巧看下面。
在这里插入图片描述

思路:

看不明白过程看图片中的伪代码就理解了

在这里插入图片描述

//一刷战败 :
/*
这测试用例再来一百个,好评
2.00000
-2147483648
 */
//传统做法时间复杂度高,经不起测试,改用快速幂的思想
var myPow = function(x, n) {
    
    
    let reusult = 1.0
    //如果负数,2^-2可以变成 (1/2)^2
    if(n<0){
    
    
        //js中默认不是整除
        x = 1/x 
        n = -n
    }
    while(n>0){
    
    
        if(n&1){
    
    
            reusult*=x
        }
        x*=x
        //我的天,js中的移位还出错
        //原来是>>是有符号数的移位,>>>这个是无符号数的移位
        //下面第一种是错误的,剩下两个都是正确的
        // n = n>>1
        // n = Math.floor(n/2)
        n = n>>>1
    }
    return reusult
};

看完代码是不是明白了呢?,移位运算符可能不太好用,这里涉及到算术移位和逻辑移位的操作,针对输入的数子太大,程序就会崩,下面这组测试用例就是亮点
2.00000
-2147483648

详情看我的另外一篇博客

传送门

猜你喜欢

转载自blog.csdn.net/qq_44606064/article/details/114695930
今日推荐