题目描述:
给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
示例 1:
输入: 5
输出: True
解释:
5的二进制数是: 101
示例 2:
输入: 7
输出: False
解释:
7的二进制数是: 111
示例 3:
输入: 11
输出: False
解释:
11的二进制数是: 1011
示例 4:
输入: 10
输出: True
解释:
10的二进制数是: 1010
方法1:
主要思路:
(1)使用标志数sign,初始值置为-1;
(2)当当前位为1,且sign现在为1,则说明重复了,返回false,否则将sign置为1;
(3)当当前位为0,且sign现在为0,则说明重复了,则返回false,否则将sign置为0;
(4)判断完当前位后,将n右移1位,便于判断下一位的情形,当n变化到0时,既为终止;
class Solution {
public:
bool hasAlternatingBits(int n) {
//处理特殊的情形
if(n==0)
return true;
//标识位的统计情形,初始值置为-1
int sign=-1;
//当n变化到0时,既终止
while(n){
//判断当前位为1
if(n&1){
if(sign==1)//若上一个位也为1,则返回false
return false;
sign=1;//否则,将当前sign置为1
}
else{
if(sign==0)//若上一个位也为0,则返回false
return false;
sign=0;//否则,将当前sign置为0
}
n>>=1;//右移n一位,便于后面判断下一位的情形
}
return true;//跳出循环,则说明满足要求
}
};