/* * @lc app=leetcode id=342 lang=javascript * * [342] Power of Four */ /** * @param {number} num * @return {boolean} */ var isPowerOfFour = function(num) { // tag: 数论 // 100 // 10000 // 1000000 // 发现规律: 4的幂次方的二进制表示 1 的位置都是在奇数位(且不在最低位),其他位置都为0 // 10 // 100 // 1000 // 发现规律: 2的幂次方的特点是最低位之外,其他位置有且仅有一个1 // 如果满足: // 1. 是 2 的幂次方, 就能保证最低位之外,其他位置有且仅有一个1 // 我们还需要保证 // 2. 这个1不再偶数位置,一定在奇数位置就行了 // 我们可以取一个特殊数字,这个特殊数字,奇数位置都是1,偶数位置都是0,然后和这个特殊数字 // `求与`, 如果等于本身,那么毫无疑问,这个1不再偶数位置,一定在奇数位置 // 因为如果在偶数位置,`求与`的结果就是0了 // 特殊的数字: // 01010101010101010101010101010101 if (num === 1) return true; if (num < 4) return false; if ((num & (num - 1)) !== 0) return false; return (num & 0x55555555) === num; };