Tema del algoritmo Leetcode --- buscando el poder de un número entero (recursividad de dos puntos)

Este es un tema recientemente revisado, parece simple, pero no se permite llamar a funciones de biblioteca, lo que equivale a funciones de biblioteca de escritura a mano. En primer lugar, pienso en bucles violentos, pero la complejidad temporal de este método es demasiado alta. y es difícil vivir del sistema, jajaja. Consulte a continuación las habilidades para la resolución de problemas.
Inserte la descripción de la imagen aquí

Ideas:

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

Inserte la descripción de la imagen aquí

//一刷战败 :
/*
这测试用例再来一百个,好评
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
};

¿Entiendes después de leer el código? , El operador de turno puede no ser fácil de usar, aquí implica operaciones de cambio aritmético y de cambio lógico, ya que el número de entrada es demasiado grande, el programa colapsará, el siguiente conjunto de casos de prueba es lo más destacado
2.00000
-2147483648

Vea mi otro blog para más detalles.

Portal

Supongo que te gusta

Origin blog.csdn.net/qq_44606064/article/details/114695930
Recomendado
Clasificación