LeetCode题解:231. 2的幂,迭代,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/power-of-two/

解题思路:

  1. 如果一个数是2的幂次方,表示如果将其不断除以2,最终结果为1。
  2. 如果一个数不是2的幂次方,那么将其不断除以2,其中间结果会出现一个不为1的奇数。
  3. 因此可以用迭代法,将其不断除以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;
};

你可能感兴趣的:(LeetCode,leetcode)