力扣刷题——Python解位移相关题目

本文介绍了Python中位移运算符的原理及其在四道简单题目中的应用,包括位反、幂运算、补数计算和比特计数。通过实例解析和刷题总结,帮助读者理解并掌握这些基本的位操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

1.位移的定义

位移运算符 << 与 >> 是二元的位运算符;
即有两个被操作的数:x<<y——将x左移y位;x>>y——将x右移y位。

二、题目解析

190.颠倒二进制位 难度:简单

在这里插入图片描述

class Solution:
	def reverseBites(self,n:int)->int:
		res=0
		for i in range(32):
			res=(res<<1)|(n&1)
			n=n>>1
		return res

颠倒给定的32位无符号整数的二进制位,综合应用了位与、位或、左移、右移;
建立循环依次遍历,每次将res左移1位用来连接n的尾端,之后再将n右移一位;
因为每次res左移1位后,末位为0,n每次位与上1都为其本身,0或上1为1,0或上0为0。

231.2的幂 难度:简单

在这里插入图片描述

class Solution:
	def isPowerOfTwo(self,n:int)->int:
		for i in range(31):
			if (1<<i)==n:
				return	True
		return False

2的幂的题目在二进制各种运算中经常出现,也就是有很多种方法都可以解这道题目;
此次使用的是左移的方法做的;
因为1左移的执行效果本质即为2的x次幂,用if与n做比较即可。

476.数字的补数 难度:简单

在这里插入图片描述

class Solution:
	def findComplement(self,num:int)->int:
		i=ans=0
		while num:
			if not num&1:
				ans+=1<<i
			num>>=1
			i+=1
		return ans

一个特别巧的方法;

338.比特位计数 难度:简单

在这里插入图片描述

class Solution:
	def countBits(self,n:int)->List[int]:
		bits=[0]
		for i in range(1,n+1):
			bits.append(bits[i>>1]+(i&1))
		return bits

在这里插入图片描述
此题解题思路来源于官方

三、刷题总结

今天的题目都是关于一些位运算的,但是如果是入门的话(说的就是我),刻意地使用这个方法去解题还是有一些难度的,容易会在一些方面想不明白,甚至也会想放弃,但是相信我,多花时间去想一想,想明白的那一瞬间,还是很快乐的!

最后,介绍一下自己,我是缪斯,不愿被定义!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MUSE_X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值