博客
关于我
693 交替位二进制数(位运算)
阅读量:356 次
发布时间:2019-03-04

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

1. 问题描述:

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

示例 1:

输入:n = 5

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

示例 2:

输入:n = 7

输出:false
解释:7 的二进制表示是:111

示例 3:

输入:n = 11

输出:false
解释:11 的二进制表示是:1011

示例 4:

输入:n = 10

输出:true
解释:10 的二进制表示是:1010

示例 5:

输入:n = 3

输出:false

提示:

  • 1 <= n <= 2 ^ 31 - 1

2. 思路分析:

由题目可以知道我们需要获取当前十进制数字n对应的二进制数字上的各个位,然后依次检查相邻的两个数字是否相同,获取二进制数字上的各个位可以使用移位运算来获取,并且我们需要使用一个变量来记录上一次的位置对应的数字这样才可以进行相邻位置数字的比较

3. 代码如下:

class Solution:    def hasAlternatingBits(self, n: int) -> bool:        p = n & 1        # 除以2用来这样后面获取最后一位的数字        n >>= 1        while n > 0:            t = n & 1            # 通过异或运算来检查相邻的两个数字是否是相同            if not t ^ p: return False            n >>= 1            p = t        return True

 

转载地址:http://ahgr.baihongyu.com/

你可能感兴趣的文章
在vue中添加echarts
查看>>
vue中echart数据动态切换,一看就懂
查看>>
Python实现理解树,树的遍历,二分查找
查看>>
Python3.6爬虫记录
查看>>
还不懂MySQL索引?这1次彻底搞懂B+树和B-树
查看>>
搞清楚Spring Cloud架构原理的这4个点,轻松应对面试
查看>>
1月份2月份GitHub上最热门的23个Java开源项目
查看>>
maven安装
查看>>
2020第十五届全国大学生智能汽车竞赛——4X4矩阵键盘+Flash调参系统
查看>>
合并两个有序数组
查看>>
Ubuntu 环境下使用中文输入法
查看>>
小白学习Vue(?)--model选项的使用(自定义组件文本框双向绑定)
查看>>
聊聊我的五一小假期
查看>>
面向对象之异常处理:多路捕获
查看>>
Python简易五子棋
查看>>
MySQL8.0.19 JDBC下载与使用
查看>>
Windows安装MongoDB 4.2.8
查看>>
Vue新建项目——页面初始化
查看>>
Cent OS 7.6 服务器软件安装(这篇博客主要是为了方便我配置云主机的)
查看>>
MySQL使用系列文章
查看>>