题目链接:https://leetcode-cn.com/problems/binary-number-with-alternating-bits/
思路:n右移一位,然后异或它本身。最后用前面得到的结果与一下结果加一,判断是否等于零即可。等于零是true,否则是false。
举例:
n=5 二进制:00000101 这里只用8位二进制解释即可
右移一位:00000101 shr 1 = 00000010
两数异或:00000101 xor 00000010 = 00000111 这个值加一:00000111 + 1 = 00001000
两数与:00000111 and 00001000 == 0
这个值等于0,返回true~~~~
n=4 二进制:00000100 这里只用8位二进制解释即可
右移一位:00000100 shr 1 = 00000010
两数异或:00000100 xor 00000010 = 00000110 这个值加一:00000110 + 1 = 00000111
两数与:00000110 and 00000111 != 0
这个值不等于0,返回false~~~~
上代码:
class Solution {
fun hasAlternatingBits(n: Int): Boolean {
val num = n shr 1 xor n
return num and num + 1 == 0
}
}