题目描述:
给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。
解题思路:
1.对给到的数循环取余,若当前取余结果等于上次取余的结果,则说明相邻数字相同,则返回 false。循环结束返回 true。
2.利用位运算的异或运算。
完整代码:
/**
* @param {number} n
* @return {boolean}
*/
var hasAlternatingBits = function(n) {
let temp=n%2;
n=Math.floor(n/2);
while(n/2!=0){
if(n%2==temp){
return false;
}
temp=n%2;
n=Math.floor(n/2);
}
return true;
};
/**
* @param {number} n
* @return {boolean}
*/
var hasAlternatingBits = function(n) {
const temp = n ^ (n >> 1);
return (temp & (temp + 1)) === 0;
};