美文网首页
693. Binary Number with Alternat

693. Binary Number with Alternat

作者: 衣介书生 | 来源:发表于2018-04-05 14:47 被阅读18次

    题目分析

    题目链接,登录 LeetCode 后可用
    这道题目让我们判断一个数的二进制形式的所有位是不是循环交替的。比如:

    5,101,返回 true
    3,11,返回 false
    

    解题思路就是求一个数除 2 的余数得到的就是二进制形式的最低位的值。将一个数除 2,对应的就是二进制形式的右移运算,并且一个数的最高位不可能为 0。由此我们可以构造一个循环结构,循环结束的条件就是 n == 1(只剩下最高位的 1)。

    代码

    class Solution {
        public boolean hasAlternatingBits(int n) {
            
            // 边界值
            if(n == 1) {
                return true;
            }
            
            
            int pre = n % 2;
            n /= 2;
            
            while(n != 1) {
                int cur = n % 2;            
                if((pre ^ cur) != 0) {
                    pre = cur;
                } else {
                    return false;
                }
                n /= 2;
            }
            
            // return ((pre ^ n) == 1);
            // 循环退出的条件是 n == 1,只要判断上一位是不是 0 即可
            return pre == 0;
        }
    }
    

    相关文章

      网友评论

          本文标题:693. Binary Number with Alternat

          本文链接:https://www.haomeiwen.com/subject/lopmzxtx.html