题目描述
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
-
示例 1:
输入: 1
输出: true
解释: 20 = 1 -
示例 2:
输入: 16
输出: true
解释: 24 = 16 -
示例 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的幂,这点大家可以思考下
}
}
注意点
- 题目如果和2相关,则可能要考虑位运算。
- 友情链接:第326题——3的幂。
- 友情链接:第342题——4的幂。