交替位二进制数
难度:简单
通过将十进制n转化为二进制,再判断是否包含 11 和 00 即可
代码如下:
public boolean hasAlternatingBits(int n) {
StringBuilder sb = new StringBuilder();
while(n!=0){
int temp = n%2;
sb.append(temp);
n /=2;
}
String res = sb.toString();
if (res.contains("11")||res.contains("00")){
return false;
}
return true;
}
执行结果:成功
执行用时不佳,想想办法优化一下,不难发现其实我们不需要求出整个数二进制,只需要在不断遍历的过程中每次去验证 当前位 与 前一位 是否相等即可。
代码如下:
public boolean hasAlternatingBits(int n) {
int pre = -1;
while(n!=0){
int cur = n%2;
if (cur==pre){
return false;
}
pre = cur;
n /=2;
}
return true;
}