1.题目
LeetCode:693. 交替位二进制数
【easy】
2.解题
方法一:逐位判断
首先判断n是偶数还是奇数,从而确定n最后一位是0还是1,然后从后往前逐位判断是否是1和0交替。
java:
class Solution {
public boolean hasAlternatingBits(int n) {
int f = 0;
if ((n % 2) == 1) f = 1;
while (n > 0) {
if ((n & 1) != f) return false;
n >>= 1;
f = 1 - f;
}
return true;
}
}
时间复杂度:O(n)
空间复杂度:O(1)
方法二:异或
如果一个数的二进制表示是1和0交替的,那么他右移一位和原数进行异或的结果是所有位为1,然后该结果加1再进行与的结果肯定为0.
java:
class Solution {
public boolean hasAlternatingBits(int n) {
int a = (n ^ (n >> 1));
return (a & (a + 1)) == 0;
}
}
时间复杂度:O(1)
空间复杂度:O(1)