这是最近刷到的一道题目,看似简单,但是这个不允许调用库函数,相当于手写库函数,首先想到暴力循环,可是这个方法时间复杂度太高,系统上过不去,哈哈哈。解题技巧看下面。
思路:
看不明白过程看图片中的伪代码就理解了
//一刷战败 :
/*
这测试用例再来一百个,好评
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
详情看我的另外一篇博客