当前位置: 首页 > news >正文

( 位运算 ) 693. 交替位二进制数 ——【Leetcode每日一题】

❓693. 交替位二进制数

难度:简单

给定一个正整数,检查它的二进制表示是否总是 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 1 <= n <= 2^{31} - 1 1<=n<=2311

💡思路:

基础知识必知:一篇文章搞懂位运算

法一:数学

  • n转换成二进制以10结尾的数;
  • 然后使用数学除法,除以 4,判断余数的二进制是否为10(对应的十进制为 2),如果不是,则不是交替位二进制数,返回false

法二:位运算

对于 1010 这种位级表示的数,把它向右移动 1 位得到 101,这两个数每个位都不同,因此异或得到的结果为 1111

  1. 对输入 n 的二进制表示右移一位后,得到的数字再与 n 按位异或得到 a

    • 当且仅当输入 n交替位二进制数时,a 的二进制表示全为 111(不包括前导 000)。
  2. aa+1 按位与,当且仅当 a 的二进制表示全为 1 时,结果为 0

结合上述两步,可以判断输入是否为交替位二进制数

🍁代码:(Java、C++)

法一:数学
Java

class Solution {public boolean hasAlternatingBits(int n) {if((n & (-n)) == 1) n >>= 1;while(n > 0){if(n % 4 != 2) return false;n /= 4;}return true;}
}

C++

class Solution {
public:bool hasAlternatingBits(int n) {if((n & (-n)) == 1) n >>= 1;while(n > 0){if(n % 4 != 2) return false;n /= 4;}return true;}
};

法二:位运算
Java

class Solution {public boolean hasAlternatingBits(int n) {int a = (n ^ (n >>> 1));return (a & (a + 1)) == 0;}
}

C++

class Solution {
public:bool hasAlternatingBits(int n) {long a = (n ^ (n >> 1));return (a & (a + 1)) == 0;}
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( 1 ) O(1) O(1),仅使用了常数时间来计算。
  • 空间复杂度 O ( 1 ) O(1) O(1),使用了常数空间来存储中间变量。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

http://www.lryc.cn/news/66884.html

相关文章:

  • http简述
  • 一顿饭的事儿,搞懂了Linux5种IO模型
  • C#面向对象的概念
  • 探索学习和入门使用GitHub Copilot:提升代码开发的新利器
  • 在字节跳动做了6年软件测试,4月无情被辞,想给划水的兄弟提个醒
  • 常见信号质量问题、危害及其解决方法-信号完整性-过冲、噪声、回勾、边沿缓慢
  • Java 自定义注解及使用
  • ChatGPT的强化学习部分介绍——PPO算法实战LunarLander-v2
  • JavaWeb ( 八 ) 过滤器与监听器
  • Notion Ai中文指令使用技巧
  • Linux一学就会——编写自己的shell
  • 编程练习【有效的括号】
  • Android 音频开发——桌面小部件(七)
  • 常见的C++包管理
  • 基于yolov7开发构建学生课堂行为检测识别系统
  • GPT-4 开始内测32k输入长度的版本了!你收到邀请了吗?
  • 如何用ChatGPT做新品上市推广方案策划?
  • Qt之QGraphicsEffect的简单使用(含源码+注释)
  • 前端优化-css
  • 第三方ipad笔哪个牌子好用?ipad触控笔推荐平价
  • windows10+detectron2完美安装教程
  • 串口与wifi模块
  • 上财黄烨:金融科技人才的吸引与培养
  • 利用MQ事务消息实现分布式事务
  • C++面向对象设计:深入理解多态与抽象类实现技巧
  • 长三角生物医药产业加速跑,飞桨螺旋桨为创新药企、医药技术伙伴装上AI大模型引擎...
  • orin Ubuntu 20.04 配置 Realsense-ROS
  • MyBatis基础知识点总结
  • 校园企业车辆维修报修管理系统设计与开发
  • 【企业信息化】第1集 免费开源ERP: Odoo 16 CRM客户关系管理系统