【Python3】【力扣题】190. 颠倒二进制位

【力扣题】题目描述:

【Python3】代码:

1、解题思路:将整数转为二进制字符串,截取、反转、补足32位,再转回整数。

知识点:bin(...):转为二进制字符串,即‘0bxx...’。

             str [2:]:切片,从第2位开始截取字符串。

             str [::-1]:反转字符串,即第1个变成最后一个,第2个变成倒数第2个,...。

              str.ljust(...):左对齐,并指定字符补足右边空缺位数。

              int(...):转为整数。

       另:str.replace(old,new):字符串中用new替换old。

              str1+str2:字符串拼接。(例如:“1”+“2”=“12”)

              len(str):获取字符串长度。

class Solution:
    def reverseBits(self, n: int) -> int: 
        return int(bin(n)[2:][::-1].ljust(32,'0'),2)
        # 或者
        return int(bin(n).replace("0b","")[::-1].ljust(32,'0'),2)
        # 或者
        return int((bin(n)[2:][::-1]+"0"*32)[:32],2)
        # 或者
        a = bin(n).replace("0b","")[::-1]
        m = 32 - len(a)
        for i in range(m):
            a += "0"
        return int(a,2)

2、解题思路:位移。将二进制从低到高依次枚举每一位,反转到对应位置(例如:最低位反转到最高位)。

 知识点:n & 1:获取二进制低位的一位。整数n和1进行二进制与运算。(二进制中,1&1=1,1&0=0,0&0=0)

             res |= x:res和x进行二进制或运算,并重新赋值给res。

              << (31-i):左移(31-i)位。例如:第0位左移到第31位。

              n >>= 1:n右移一位,并重新赋值给n。

        另:range(31,-1,-1):  从31到0的数组(含31不含-1)。即依次31、30、29、...2、1、0。

class Solution:
    def reverseBits(self, n: int) -> int:       
        res = 0        #记录反转结果
        for i in range(32):
            res |= (n & 1) << (31-i)
            n >>= 1
        return res
        # 或者
        res = 0
        for i in range(31,-1,-1):
            res |= (n & 1) << i
            n >>= 1
        return res

 

3、解题思路:分治算法。将32位分成两个16位,16位再分成两个8位,...,2位最后分成两个1位。再回溯反转合并,两个1位反转合并成2位,两个2位再反转合并成4位,...,两个16位最后反转合并成32位。

知识点:二进制与运算:1&1=1,1&0=0,0&0=0。和0与都为0,和1与都为自身。

               二进制或运算:1 | 1=1,1 | 0=1,0 | 0=0。

              python里不对位数做限制,所以左移后必须“与” 一个0xffffffff ,表示只取32位。

注解:0x55555555即01010101...01010101。左移1位再和其“与”运算,和其“与”运算再右移1位,相当于两个1位互换位置。

0x33333333即00110011...00110011。左移2位再和其“与”运算,和其“与”运算再右移2位,相当于两个2位互换位置。

0x0f0f0f0f、0x00ff00ff 同理。

class Solution:
    def reverseBits(self, n: int) -> int:   
        # python里不对位数做限制,所以左移后必须“与” 一个0xffffffff ,表示只取32位
        M32 = 0xffffffff   # 11111111...11111111,即1*32
        M1 = 0x55555555    # 01010101...01010101
        M2 = 0x33333333    # 00110011...00110011
        M4 = 0x0f0f0f0f    # 00001111...00001111
        M8 = 0x00ff00ff    # 00000000...11111111

        n = (n >> 1) & M1 | ((n & M1) << 1) & M32
        n = (n >> 2) & M2 | ((n & M2) << 2) & M32
        n = (n >> 4) & M4 | ((n & M4) << 4) & M32
        n = (n >> 8) & M8 | ((n & M8) << 8) & M32
        return n >> 16 | (n << 16) & M32

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/105764.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[UDS] --- WriteDataByIdentifier 0x2E

1 0x2E功能描述 根据ISO14119-1标准中所述&#xff0c;诊断服务2E主要用于Client向Server(ECU)通过DID的方式写入相关的数据。 2 0x2E应用场景 一般而言&#xff0c;对于2E诊断服务&#xff0c;主要应用场景为以下场合&#xff1a; 在整车下线的过程中写入相关配置信息&…

【PG】PostgreSQL客户端认证pg_hba.conf文件

目录 文件格式 连接类型(TYPE) 数据库&#xff08;database&#xff09; 用户(user) 连接地址&#xff08;address&#xff09; 格式 IPv4 IPv6 字符 主机名 主机名后缀 IP-address/IP-mask auth-method trust reject scram-sha-256 md5 password gss sspi …

【Zero to One系列】微服务Hystrix的熔断器集成

前期回顾&#xff1a; 【Zero to One系列】springcloud微服务集成nacos&#xff0c;形成分布式系统 1、hystrix依赖包 首先引入hystrix相关的依赖包&#xff0c;版本方面自己和项目内相对应即可&#xff0c;我这这边是直接使用的默认版本。 <dependency><groupId&g…

ArcGIS中如何为跨带数据投影?

北京54、西安80高斯克吕格投影是我国常用的投影坐标系统,它们是一种分带投影方式,有3和6分带,不适合大范围内的投影使用。但是如果有份数据范围较大,跨越了多个度带,该选择哪个坐标系统进行投影转换呢? 在大范围内,常用的坐标系统有Albers等面积投影和Lambert等角投影,…

浦惠钱包app拉新推广渠道 实时数据

先介绍下推广渠道&#xff1a;“聚量推客”&#xff0c;可以申请浦惠钱包app拉新推广&#xff0c;支持地推和网推以及社群等渠道推广&#xff08;不限制&#xff09; 下面说下流程介绍 1、微信扫描推广码&#xff0c;输入用户手机号点击参与活动&#xff0c;进入浦惠钱包界面&…

MarkDown详细入门笔记

本帖整理了MarkDown的入门学习笔记~ 一.介绍 Markdown 是一种轻量级的「标记语言」&#xff0c;它的优点很多&#xff0c;目前也被越来越多的写作爱好者&#xff0c;撰稿者广泛使用。 诸如微信公众平台、CSDN博客、还有Typora中写文档的部分&#xff0c;均涉及到MD的功能~ 它…

超写实数字人小灿加入,助力火山语音全类型虚拟数字人应用创新

当发现更多AI科技作用于日常生活时&#xff0c;你是否想过竟然有一天会与AI数字人做同事&#xff1f;日前&#xff0c;火山语音团队重磅推出了一位神秘新成员——首个超写实数字员工小灿&#xff01;这位新同事不仅形象清新美丽&#xff0c;还有着很强的亲和力&#xff0c;大幅…

Python脚本:让工作自动化起来

Python是一种流行的编程语言&#xff0c;以其简洁和易读性而闻名。它提供了大量的库和模块&#xff0c;使其成为自动化各种任务的绝佳选择。 本文将探讨Python脚本及其代码&#xff0c;可以帮助您自动化各种任务并提高工作效率。无论您是开发人员、数据分析师还是只是想简化工…

uni-app:实现picker下拉列表的默认值设置

效果 分析 1、在data中将index8的初始值设置为-1&#xff0c;表示未选择任何选项&#xff1a; index8: -1, //选择的下拉列表下标 2、在bindPickerChange8事件处理函数中添加条件判断。如果选择的值是-1&#xff0c;则将this.index8设置为"请输入"&#xff0c;否则将…

vue3中常用的新组件

一、Fragment vue2中&#xff0c;组件必须有一个根标签 vue3中&#xff0c;组件可以没有根标签&#xff0c;内部会将多个标签包含在一个Fragment虚拟元素中。 优点&#xff1a;减少标签层级。 二、Teleport&#xff08;传送门&#xff09; 作用&#xff1a;将组件的 html …

掌握CSS Flexbox,打造完美响应式布局,适配各种设备!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 基…

【速看】如何通过合理的封装,让你的自动化脚本更上一层楼!

1. 前言 上一篇推文利用一个在图片范围内实现随机坐标点击的例子&#xff0c;去教会大家如何将自己想要的效果实现出来&#xff0c;受到大家的热情反响&#xff0c;在我们官方讨论群中&#xff0c;还有大佬对我们的示例代码进行优化改进&#xff0c;做了很多合理的函数封装&…

HCIA数据通信——交换机(Vlan间的通信与安全)

前言 之前的提到了交换机的概念和实验。不过交换机的一些功能还没有说完&#xff0c;我们的实验也仅仅是阻止相同地址段的IP地址互通&#xff0c;也没有用到子接口和路由器。显然&#xff0c;那样的配置过于简单。 端口安全 Port Security&#xff08;端口安全&#xff09;的功…

【1.2】神经网络:神经元与激活函数

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 神经网络&#xff08;随缘更新&#xff09; ✨特色…

node开发微信群聊机器人第⑤章

▍PART 序 看本文时&#xff0c;请确保前4章都已经看过&#xff0c;不然本章你看着看着思维容易跳脱&#xff01;再一个机器人教程只在公众号&#xff1a;“程序员野区”首发。csdn会跟着发一份&#xff0c;未经博主同意&#xff0c;请勿转载&#xff01;欢迎分享到自己的微信…

leetCode 76. 最小覆盖子串 + 滑动窗口

76. 最小覆盖子串 - 力扣&#xff08;LeetCode&#xff09; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻…

【iOS免越狱】利用IOS自动化web-driver-agent_appium-实现自动点击+滑动屏幕

1.目标 在做饭、锻炼等无法腾出双手的场景中&#xff0c;想刷刷抖音 刷抖音的时候有太多的广告 如何解决痛点 抖音自动播放下一个视频 iOS系统高版本无法 越狱 安装插件 2.操作环境 MAC一台&#xff0c;安装 Xcode iPhone一台&#xff0c;16 系统以上最佳 3.流程 下载最…

Golang 自定义函数库(个人笔记)

1.用字符串连接切片元素&#xff08;类似php implode&#xff09; package mainimport ("fmt""strconv""strings" )func main() {data : []int{104, 101, 108, 108, 111}fmt.Println(IntSliceToString(data, ",")) }func IntSliceToS…

stable-diffusion-webui环境部署

stable-diffusion-webui环境部署 1. 环境创建2. 安装依赖库3.下载底模4.运行代码5. 报错信息报错1报错2 1. 环境创建 创建虚拟环境 conda create -n env_stable python3.10.0进入虚拟环境 conda activate env_stableclone源码 git clone https://github.com/AUTOMATIC1111/stab…

用VSCODE启动Java项目

下载插件 推荐下载插件 启动 在vscode中打开项目或将项目拖进vscode,等进度条加载完成即成启动项目
最新文章