693. Binary Number with Alternating Bits #
题目 #
给定一个正整数,检查其二进制表示是否总是 0
、1
交替出现。换言之,二进制表示中相邻两位的数字永不相同。
思路 #
代码 #
class Solution {
public boolean hasAlternatingBits(int n) {
/** 先定位最高位的 1 */
int start = 0;
for (int i = 30; i >= 0; i--) {
if (((n >> i) & 1) == 0) continue;
start = i;
break;
}
/** 判断数 n 的二进制表示中相邻两位的数字永不相同 */
for (int i = start - 1, lastBit = ((n >> start) & 1); i >= 0; i--) {
if (((n >> i) & 1) == lastBit) return false;
lastBit = lastBit = 1 ? 0 : 1;
}
return true;
}
}