求star

开源不易,喜欢请点个star吧

Ocean Han
356 字
2 分钟
Leetcode->2的幂
2022-06-27

题目#

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false

如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。

示例 1:

输入:n = 1
输出:true
解释:20 = 1

示例 2:

输入:n = 16
输出:true
解释:24 = 16

示例 3:

输入:n = 3
输出:false

提示:

  • -231 <= n <= 231 - 1

解题:key:#

①求得位1的个数#

TIP

​ n&(n-1)的性质之前提过,利用循环求得n的二进制码中1

的个数,然后进行判断,如果是2的幂,则1的个数一定只有一个

负数直接返回false即可

/**
 * @param {number} n
 * @return {boolean}
 */
var isPowerOfTwo = function(n) {
    if(n<0){
        return false
    }
    let count = 0
    // 求得n的二进制码中1 的个数
    while(n){
        n &= n-1
        count++
    }
    return count === 1
    
};

②在方法①的基础上改进#

TIP

​ 利用n&(n-1)将最低位的1变为0后,如果n为0则说明它是2的幂,负数直接返回false即可

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

③判断n是否是范围内最大次幂的约数#

TIP

​ 在题目给定的 32 位有符号整数的范围内,最大的 2的幂为,2^32 = 1073741824。

var isPowerOfTwo = function(n) {
    const BIG = 1 << 30;
    return n > 0 && BIG % n === 0;
};
Leetcode->2的幂
https://blog.oceanh.top/posts/algorithm/2的幂/
作者
Ocean Han
发布于
2022-06-27
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49