题目描述:

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:

  1. 输入: 1
  2. 输出: true
  3. 解释: 20 = 1

示例 2:

  1. 输入: 16
  2. 输出: true
  3. 解释: 24 = 16

示例 3:

  1. 输入: 218
  2. 输出: false

算法实现:

log法

  1. /**
  2. * @param {number} n
  3. * @return {boolean}
  4. */
  5. var isPowerOfTwo = function(n) {
  6. return Number.isInteger(Math.log2(n))
  7. };

递归法

  1. /**
  2. * @param {number} n
  3. * @return {boolean}
  4. */
  5. var isPowerOfTwo = function(n) {
  6. while (n) {
  7. if (n === 1) {
  8. return true
  9. } else {
  10. n /= 2
  11. }
  12. }
  13. return false
  14. };

位运算

  1. var isPowerOfTwo = function(n) {
  2. return n > 0 && (n & (n - 1)) === 0
  3. };

思考:

递归法和log方法都很容易想到,位运算的方法实在没想到,很精妙。

总结:

位运算又巩固了一下。