编程练习【交替位二进制数】

给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。

示例 1:

输入:n = 5
输出:true
解释:5 的二进制表示是:101
示例 2:

输入:n = 7
输出:false
解释:7 的二进制表示是:111.
示例 3:

输入:n = 11
输出:false
解释:11 的二进制表示是:1011.

题目来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-number-with-alternating-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法一:位运算

对于一个二进制数比如010101,将它右移一位得到001010,将右移后和右移前数字异或,即可得到011111,如此可知交替位二进制右移异或后可以得到一个01111.....的结果,我们只需要判断这个结果加一是否与原始数据相与是否等于0。

代码:

public static boolean hasAlternatingBits(int n) {
		int a=n^(n>>1);
		return (a&(a+1))==0;
    }

 方法二:

从最低位至最高位,我们用对 2 取模再除以 2 的方法,依次求出输入的二进制表示的每一位,并与前一位进行比较。如果相同,则不符合条件;如果每次比较都不相同,则符合条件。

代码:

public static boolean hasAlternatingBits(int n) {
		int num=2;
		while(n!=0) {
			int cur=n%2;
			if(cur==num) {
				return false;
			}
			num=cur;
			n/=2;
		}
		return true;
	}

你可能感兴趣的:(java编程练习,leetcode,java)