给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
示例 1:
输入: 5
输出: True
解释:
5的二进制数是: 101
示例 2:
输入: 7
输出: False
解释:
7的二进制数是: 111
示例 3:
输入: 11
输出: False
解释:
11的二进制数是: 1011
示例 4:
输入: 10
输出: True
解释:
10的二进制数是: 1010
每次取出一个,跟目前的进行比较,没什么难度
代码:
class Solution {
public boolean hasAlternatingBits(int n) {
//是二的倍数或者是1或0那么一定是的
if(n == 1 || n == 0){
return true;
}
int i = n % 2;
n = n>>1;
while ( n!=0 ) {
int j = n % 2;
if((i ^ j) == 0 ){
return false;
}else {
i = j;
n = n >> 1;
}
}
return true;
}
}
排名靠前的,不得不说思路很好,就是将一个数字与其右移一位后进行异或,如果是交替的数字,那么异或之后都是1,那么加一以后就是temp的最高位+1为1,那么与原先的temp与之后就是0,这样就完美解决了判断的问题,
比如原先是101010,是交替的,那么右移后为010101,异或就是111111,加1为1000000,与111111与就是0,是交替的,假如是101011,那么右移一位就是010101,异或为111110,加一为111111,与之后为1,不是0,那么就不是交替位二进制数
class Solution {
public boolean hasAlternatingBits(int n) {
int temp=n^(n>>1); return (temp&(temp+1))==0;
}
}
这个排名也靠前很奇怪
class Solution {
public boolean hasAlternatingBits(int n) {
char[] chars = Integer.toBinaryString(n).toCharArray();
for (int i = 0; i < chars.length - 1; i++) {
if (chars[i] == chars[i + 1]) { return false; }
}
return true;
}
}