【LeetCode】第231题——2的幂(难度:简单)

题目描述

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

  1. 示例 1:
    输入: 1
    输出: true
    解释: 20 = 1

  2. 示例 2:
    输入: 16
    输出: true
    解释: 24 = 16

  3. 示例 3:
    输入: 218
    输出: false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-of-two
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

不断除2(或者说二进制下不断右移一位)。

代码详解

除2

class Solution {
    public boolean isPowerOfTwo(int n) {
        if(n < 1) {	// 小于1的数字直接排除
            return false;
        }
        while(n != 1) {	// 直到被除数为1为止
            if(n % 2 != 0) {	// 如果除2有余数则直接判false
                return false;
            }
            n = n / 2;	// 更新被除数
        }
        return true;
    }
}

二进制移位

class Solution {
    public boolean isPowerOfTwo(int n) {
        if(n < 1) {	// 小于1的数字直接排除
            return false;
        }
        while(n != 0) {	// 循环直到值为0
            if((n & 1) == 1) {	// 与1代表取n的最后一位二进制位,如果最后一位是1
                if(n == 1) {	// 且现在的n本身就是1,或者说再右移一位n就变成0了
                    return true; // 就返回true
                } else {
                    return false;// 否则就是false
                }
            }
            n = n >> 1;	// 最后一位不是1则继续右移
        }
        return false; // true和false都无所谓的,此处有个返回值就好
    }
}

思路三:利用2的幂的数在二进制下的特点

class Solution {
    public boolean isPowerOfTwo(int n) {
        return (n > 0) && ((n & (n - 1)) == 0);	// n首先必须大于0
        // 然后n与n-1按位与,如果为0则证明为2的幂,这点大家可以思考下
    }
}

注意点

  1. 题目如果和2相关,则可能要考虑位运算。
  2. 友情链接:第326题——3的幂
  3. 友情链接:第342题——4的幂
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值