原题链接:https://leetcode-cn.com/problems/power-of-two/
解题思路:
- 如果一个数是2的幂次方,表示如果将其不断除以2,最终结果为1。
- 如果一个数不是2的幂次方,那么将其不断除以2,其中间结果会出现一个不为1的奇数。
- 因此可以用迭代法,将其不断除以2,在中间结果为奇数时退出循环,并判断其结果是否为1,为1表示n是2的幂次方。
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function (n) {
// 当n=0时,Math.floor(n % 2)将始终为0,造成死循环,因此需要特殊处理
// 当n<0时,n必然不是2的幂次方
if (n <= 0) {
return false;
}
// 如果一个数为2的幂次方,代表它可以被2整除,并且它一定是偶数
// 因此如果它不断除以2,如果它是2的幂次方,则最终n会等于1
// 如果它不是2的幂次方,表示它不是2的幂次方
while (n % 2 === 0) {
// 每次循环都除以2
n = n / 2;
}
// 根据n最终是否等于1,判断它是否2的幂次方
return n === 1;
};