题目概述
给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。
示例 1:
输入:n = 5
输出:true
解释:5 的二进制表示是:101
示例 2:
输入:n = 7
输出:false
解释:7 的二进制表示是:111.
示例 3:
输入:n = 11
输出:false
解释:11 的二进制表示是:1011.
提示:
- 1 <= n <= 2^31 - 1
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-number-with-alternating-bits
解题分析:
方法:位运算+模拟
记录第一位,判断第一位和第二位是否相同,然后移位继续判断,直到数为 0 即可。相同返回 false,遍历完成返回 true。
时间复杂度:O(log n)
空间复杂度:O(1)
class Solution {
public boolean hasAlternatingBits(int n) {
//记录第一位
int first = n & 1;
//遍历每一位
while((n >>= 1) > 0){
if(first == (n & 1)){
return false;
}
first = n & 1;
}
return true;
}
}