地址:
力扣https://leetcode-cn.com/problems/binary-number-with-alternating-bits/
题目:
给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。
示例 1:
输入:n = 5 输出:true 解释:5 的二进制表示是:101 |
示例 2:
输入:n = 7 输出:false 解释:7 的二进制表示是:111. |
示例 3:
输入:n = 11 输出:false 解释:11 的二进制表示是:1011. |
示例 4:
输入:n = 10 输出:true 解释:10 的二进制表示是:1010. |
示例 5:
输入:n = 3 输出:false |
提示:
1 <= n <= 231 - 1 |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-number-with-alternating-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
观察数的二进制,如果不是交替出现的话,势必为 00 或 11,即 3
那么也是右移做 & 运算判定
方法一、& 3,右移
bool hasAlternatingBits(int n){
int fnum1 = 0; // 00
int fnum2 = 3; // 11
int fnum = fnum1 | fnum2;
while(n)
{
if( ( (n & fnum) == fnum1) || ( (n & fnum) == fnum2) )
return false;
n = n>>1;
}
return true;
}
方法二、依次比较末位值 ,右移
取出末位值,再右移取下一位的值,如果相等表示重复元素,返回 false
通过 n & 1 就能获取 n 的最末位的值
bool hasAlternatingBits(int n){
int tmp = n & 1; // ending num
while(n)
{
n = n >> 1;
if( (n & 1) == tmp)
return false;
else
tmp = n & 1;
}
return true;
}