128、交替位二进制数

给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。

示例 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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/85248577