693. 交替位二进制数 : 位运算应用题

简介: 693. 交替位二进制数 : 位运算应用题

网络异常,图片无法展示
|


题目描述



这是 LeetCode 上的 693. 交替位二进制数 ,难度为 简单


Tag : 「模拟」、「位运算」


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


示例 1:


输入:n = 5
输出:true
解释:5 的二进制表示是:101
复制代码


示例 2:


输入:n = 7
输出:false
解释:7 的二进制表示是:111.
复制代码


示例 3:


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


提示:


  • 1 <= n <= 2^{31} - 11<=n<=2311


遍历



根据题意,对 nn 的每一位进行遍历检查。


代码:


class Solution {
    public boolean hasAlternatingBits(int n) {
        int cur = -1;
        while (n != 0) {
            int u = n & 1;
            if ((cur ^ u) == 0) return false;
            cur = u; n >>= 1;
        }
        return true;
    }
}
复制代码


  • 时间复杂度:O(\log{n})O(logn)
  • 空间复杂度:O(1)O(1)


位运算



另外一种更为巧妙的方式是利用交替位二进制数性质。


当给定值 nn 为交替位二进制数时,将 nn 右移一位得到的值 mm 仍为交替位二进制数,且与原数 nn 错开一位,两者异或能够得到形如 0000...11110000...1111 的结果 xx,此时对 xx 执行加法(进位操作)能够得到形如 0000...100000000...10000 的结果,将该结果与 xx 执行按位能够得到全 00 结果。


代码:


class Solution {
    public boolean hasAlternatingBits(int n) {
        int x = n ^ (n >> 1);
        return (x & (x + 1)) == 0;
    }
}
复制代码


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


最后



这是我们「刷穿 LeetCode」系列文章的第 No.693 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。


在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。


为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…


在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

相关文章
领域驱动设计(DDD)中的实体,值对象,和聚合
领域驱动设计(DDD)中的实体,值对象,和聚合
|
10月前
|
安全 Java 调度
线程的四种创建方式
【10月更文挑战第22天】在多线程编程中,还需要注意线程安全、死锁等问题,以确保程序的正确性和稳定性。通过合理地运用线程创建方式和相关技术,我们可以充分发挥多线程的优势,提高程序的性能和并发处理能力。
149 12
|
12月前
|
安全 Shell Linux
从命令行界面运行交互式PHP Shell
从命令行界面运行交互式PHP Shell
189 1
|
11月前
|
监控 网络协议 安全
ElementPlus的el-table-column如何添加超链接的代码
ElementPlus的el-table-column如何添加超链接的代码
|
人工智能 文字识别 自然语言处理
AI开放平台介绍
【8月更文挑战第1天】AI开放平台介绍。
552 2
|
消息中间件 监控 Java
Java一分钟之-Spring Integration:企业级集成
【6月更文挑战第11天】Spring Integration是Spring框架的一部分,用于简化企业应用的集成,基于EIP设计,采用消息传递连接不同服务。核心概念包括通道(Channel)、端点(Endpoint)和适配器(Adapter)。常见问题涉及过度设计、消息丢失与重复处理、性能瓶颈。解决策略包括遵循YAGNI原则、使用幂等性和事务管理、优化线程配置。通过添加依赖并创建简单消息处理链,可以开始使用Spring Integration。注意实践中要关注消息可靠性、系统性能,逐步探索高级特性以提升集成解决方案的质量和可维护性。
312 3
Java一分钟之-Spring Integration:企业级集成
|
Prometheus 运维 监控
子机UTC时间与NTP时间差值(s) 参数监控指标
子机UTC时间与NTP时间差值(s) 参数监控指标
325 0
|
算法 jenkins 持续交付
【MATLAB 】 CEEMDAN-ARIMA联合时序预测算法,科研创新优选算法
【MATLAB 】 CEEMDAN-ARIMA联合时序预测算法,科研创新优选算法
204 0