题目分析
题目链接,登录 LeetCode 后可用
这道题目让我们判断一个数的二进制形式的所有位是不是循环交替的。比如:
5,101,返回 true
3,11,返回 false
解题思路就是求一个数除 2 的余数得到的就是二进制形式的最低位的值。将一个数除 2,对应的就是二进制形式的右移运算,并且一个数的最高位不可能为 0。由此我们可以构造一个循环结构,循环结束的条件就是 n == 1(只剩下最高位的 1)。
代码
class Solution {
public boolean hasAlternatingBits(int n) {
// 边界值
if(n == 1) {
return true;
}
int pre = n % 2;
n /= 2;
while(n != 1) {
int cur = n % 2;
if((pre ^ cur) != 0) {
pre = cur;
} else {
return false;
}
n /= 2;
}
// return ((pre ^ n) == 1);
// 循环退出的条件是 n == 1,只要判断上一位是不是 0 即可
return pre == 0;
}
}
网友评论