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.
Ideas:
看不明白过程看图片中的伪代码就理解了
//一刷战败 :
/*
这测试用例再来一百个,好评
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.