给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
思路:
- 2的幂次方的二进制最高位为1,其余为0,2的幂次方-1则是最高位为0其余为1,
- 将这两个数做与运算则结果一定为0;
详解见leetcode官网。
代码:
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n-1)) == 0;
}
}
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
思路:
- 4的幂次方的二进制最高位为1其余为0,且1在第奇数位。
- 将4的幂次方与 1010101010101010101010101010101 做与运算结果还是它自身,该数的十六进制:0x55555555
代码:
class Solution_342 {
public boolean isPowerOfFour(int num) {
if (num <= 0) {
return false;
}
//先判断是否是二次幂
if ((num & (num - 1)) != 0){
return false;
}
//判断是否是四次幂
if ((num & 0x55555555) == num) {
return true;
}
return false;
}
}