LeetCode 693. 交替位二进制数(位运算)
发布日期:2021-07-01 03:15:31 浏览次数:2 分类:技术文章

本文共 399 字,大约阅读时间需要 1 分钟。

1. 题目

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

输入: 5输出: True解释:5的二进制数是: 101输入: 7输出: False解释:7的二进制数是: 111输入: 11输出: False解释:11的二进制数是: 1011输入: 10输出: True解释:10的二进制数是: 1010

2. 解题

  • 满足该特征的数,右移一位与其自己异或^,得到的全是11111
  • 然后上面结果+1,变成100000(注意溢出)
  • 然后11111和100000与& == 0
    在这里插入图片描述
class Solution {
public: bool hasAlternatingBits(int n) {
n = n^(n>>1); return (((long)n+1)&n) == 0;//最外层括号不能省 }};

转载地址:https://michael.blog.csdn.net/article/details/101096121 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode 137. 只出现一次的数字 II(位运算)
下一篇:LeetCode 897. 递增顺序查找树(中序遍历)

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月16日 23时44分50秒