leetcode693(交替位二进制数)--Java语言实现

那年仲夏 提交于 2020-08-19 22:17:15

求:

给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。

示例 1:

输入: 5
输出: True
解释:
5的二进制数是: 101
示例 2:

输入: 7
输出: False
解释:
7的二进制数是: 111
示例 3:

输入: 11
输出: False
解释:
11的二进制数是: 1011
 示例 4:

输入: 10
输出: True
解释:
10的二进制数是: 1010

 

题目链接: https://leetcode-cn.com/problems/binary-number-with-alternating-bits/

 

解:

1、逐位比较

从后向前获取位,通过n&1获取末位,通过n>>=1缩小n,向前逐个获取。

使用pre记录上一位的值,并且与当前值比较,判断相邻位是否相等,如果发现相邻位相等,返回false。

所有位都获取完成,没有返回false,则说明符合要求,返回true。

时间复杂度:O(1)
空间复杂度:O(1)

public boolean hasAlternatingBits(int n) {
    int pre;
    for (pre = n & 1, n >>= 1; n > 0; n >>= 1) {
        int mod = n & 1;
        if (mod == pre) return false;
        pre = mod;
    }
    return true;
}

 

2、转为字符串比较

参考官方题解,这个方法思路上没有方法1好。

时间复杂度:O(1)
空间复杂度:O(1)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!