题意是判断一个整数是否是交替位二进制数,比如:"10101"就是交替位二进制数,"100"不是。可以使用二进制取余得到每一位的数字,然后判断和前一位是否相同,也可以使用位运算,将n与n>>1异或,如果得到的数全是1,那说明是交替位二进制数。
func hasAlternatingBits(n int) bool {
// 利用二进制的思想
for pre := 2; n != 0; n /= 2 {
cur := n % 2 // 取出从低到高的每一位,用pre存前一位
if cur == pre {
return false
}
pre = cur
}
return true
}
func hasAlternatingBits(n int) bool {
// 利用二进制的思想
n = n ^ (n >> 1)
return n & (n+1) == 0
}