LeetCode每日一题题解:693. 交替位二进制数-题解-python && C++源代码-经典位运算

简介: LeetCode每日一题题解:693. 交替位二进制数-题解-python && C++源代码-经典位运算

693. 交替位二进制数


难度简单131收藏分享切换为英文接收动态反馈


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


示例 1:


输入:n = 5

输出:true

解释:5 的二进制表示是:101

示例 2:


输入:n = 7

输出:false

解释:7 的二进制表示是:111.

示例 3:


输入:n = 11

输出:false

解释:11 的二进制表示是:1011.

提示:


1 <= n <= 231 - 1

解题思路:


将n右移一位,然后将n右移一位得到的值与n进行异或,如果n是0和1交替出现的,则异或之后的值必全为1

则ans 理论为应该全为1 ,因此ans+1理论应该全为0,则ans与ans+1 应该为0(这是n是0和1交替出现的情况)

否则输出False。


Python代码:

class Solution:
    def hasAlternatingBits(self, n: int) -> bool:
        ans = n ^ (n >> 1)
        return ans & (ans + 1) == 0

C++代码:

class Solution {
public:
    bool hasAlternatingBits(int n) {
        long a = n^(n>>1);
        return (a&(a+1)) == 0;
    }
};
相关文章
|
1月前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
32 6
|
1月前
|
C++
两种解法解决 LeetCode 27. 移除元素【C++】
两种解法解决 LeetCode 27. 移除元素【C++】
|
2天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
3月前
|
存储 算法 程序员
【Leetcode 程序员面试金典 01.01】判定字符是否唯一 —— 位运算|哈希表
可以使用哈希表或位运算来解决此问题:由题可知s[i]仅包含小写字母,int[26]即能表示字符的出现次数;
|
3月前
|
Java 程序员
【Leetcode 程序员面试金典 05.01】插入 —— 位运算
位运算问题,只需要把 N 的 i 到 j 位都置 0 后再和 M 左移 i 位的结果进行按位或即可
|
19天前
|
搜索推荐 算法 前端开发
各种排序算法及Python源代码
各种排序算法及Python源代码
23 3
|
1月前
|
Go C++
【力扣】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
【2月更文挑战第17天】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
29 8
|
2月前
|
JavaScript 前端开发 开发工具
Python之JavaScript逆向系列——3、浏览器的开发工具——源代码的使用
Python之JavaScript逆向系列——3、浏览器的开发工具——源代码的使用
16 0
|
2月前
|
C++
《起风了》C++源代码
《起风了》C++源代码
|
3月前
|
算法 C++ 机器人
力扣 C++|一题多解之动态规划专题(1)
力扣 C++|一题多解之动态规划专题(1)
41 0
力扣 C++|一题多解之动态规划专题(1)