力扣693(java)-交替位二进制数(简单)

题目:

给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。

 

示例 1:

输入:n = 5
输出:true
解释:5 的二进制表示是:101
示例 2:

输入:n = 7
输出:false
解释:7 的二进制表示是:111.
示例 3:

输入:n = 11
输出:false
解释:11 的二进制表示是:1011.
 

提示:

1 <= n <= 231 - 1

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-number-with-alternating-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

一、模拟

依次遍历二进制的每一位,并与前一位相比较,如果存在前后两个数相同,则不是交替位二进制数,则直接返回False;如果任意两个相邻的二进制位的值都不相同,则是交替位二进制数,返回 true。

注释:

& : 按位与,两个都是 1 的时候结果为1,否则结果为0;
^ :按位异或,若参加运算的两个二进制位值相同则为0,否则为1。

代码:

 1 class Solution {
 2     public boolean hasAlternatingBits(int n) {
 3         int pre = n & 1;
 4         n >>= 1;
 5         while(n != 0){
 6             int cur = n & 1;
 7             if(cur == pre){
 8                 return false;
 9             }
10             pre = cur;
11             n >>= 1;
12         }
13         return true;
14     }
15 }

 

posted on 2022-07-12 23:04  我不想一直当菜鸟  阅读(25)  评论(0编辑  收藏  举报