leetcode[342]4的幂 Java实现 (位运算技巧,用mask找出1的位置)

该博客介绍了一个判断整数是否为4的幂次方的算法,利用位运算进行高效判断。通过检查n是否大于0,n与自身按位与的结果是否等于n,以及n与特定掩码做与运算的结果是否为0,来确定n是否是4的幂。此外,还讨论了通过n%3==1来辅助判断的方法。
摘要由CSDN通过智能技术生成
//给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。 
//
// 整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x 
//
// 
//
// 示例 1: 
//
// 
//输入:n = 16
//输出:true
// 
//
// 示例 2: 
//
// 
//输入:n = 5
//输出:false
// 
//
// 示例 3: 
//
// 
//输入:n = 1
//输出:true
// 
//
// 
//
// 提示: 
//
// 
// -231 <= n <= 231 - 1 
// 
//
// 
//
// 进阶: 
//
// 
// 你能不使用循环或者递归来完成本题吗? 
// 
// Related Topics 位运算 
// 👍 190 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean isPowerOfFour(int n) {
        return n > 0 && (n & -n) == n && (n & 0xaaaaaaaa) == 0;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

在上题2的幂的基础上,要判断唯一的1是否出现在奇数位上,用一个奇数位全是0的掩码做与运算即可:

mask=(10101010101010101010101010101010)2

还有一种方法是,判断n % 3 == 1是否成立。若是2的倍数而不是4的倍数时,n % 3 == 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值