/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function(n) {
if(n===0){
return false;
}
while((n>>1)>0){
if((n & 1)==1){
return false;
}
n = n>>1;
}
if(n!=1){
return false;
}
return true;
};
这是一道简单题,使用循环或者递归判断n是否能被2整除即可。
但是,这道题最好的方法是使用位运算,可以大大的提高代码效率。
除了位运算,第326题还提供了一种新的思路:使用Math.log函数:
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfThree = function(n) {
if(n===0){
return false;
}
var res = Math.log(n)/Math.log(3);
var res_round = Math.round(res);
if(Math.abs(res_round-res)<10e-15){
return true;
}
return false;
};