Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example: Given num = 16, return true. Given num = 5, return false.
Follow up: Could you solve it without loops/recursion?
Solution 1
/**
* @param {number} num
* @return {boolean}
*/
var isPowerOfFour = function(num) {
"use strict";
if (num === 0) {
return false;
}
while (num % 4 === 0) {
num /= 4;
}
return num === 1;
};
Solution 2
/**
* @param {number} num
* @return {boolean}
*/
var isPowerOfFour = function(num) {
"use strict";
return num.toString(4).replace(/0/g, "") === "1";
};
Solution 3
/**
* @param {number} num
* @return {boolean}
*/
var isPowerOfFour = function(num) {
"use strict";
return (num & (num-1)) === 0 && (num & 0x55555555) !== 0;
};