给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
题目网址:https://leetcode-cn.com/problems/binary-number-with-alternating-bits/
输入: 5
输出: True
解释:
5的二进制数是: 101
输入: 7
输出: False
解释:
7的二进制数是: 111
方法一
class Solution {
public boolean hasAlternatingBits(int n) {
int result = ret(n);
if(result == 0){
return true;
}else{
return false;
}
}
public int ret(int n){
int tmp = n ^ (n >> 1);
return tmp & (tmp + 1);
}
}
方法二:
将二进制参数转换成字符串,并放入一个char数组中,遍历这个数组,如果出现相等的情况,返回false
实现代码:
class Solution {
public boolean hasAlternatingBits(int n) {
String s = Integer.toBinaryString(n);
char[] a = s.toCharArray();
for(int i = 0; i < a.length - 1 ;i++){
if(a[i] == a[i + 1]){
return false;
}
}
return true;
}
}
方法三: 获取该数字的倒数位和倒数第二位,比较
比较完右移一位。
class Solution {
public boolean hasAlternatingBits(int n) {
while(n != 0){
if( n % 2 == (n >> 1) % 2){
return false;
}
n = n >> 1;
}
return true;
}
}