当前位置:首页 > 编程笔记 > 正文
已解决

力扣刷题 day53:10-23

来自网友在路上 160860提问 提问时间:2023-10-24 11:24:26阅读次数: 60

最佳答案 问答题库608位专家为你答疑解惑

1.二进制表示中质数个计算置位

给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。

计算置位位数 就是二进制表示中 1 的个数。

例如, 21 的二进制表示 10101 有 3 个计算置位。

方法一:直接模拟 

#方法一:直接模拟
def countPrimeSetBits(left,right):ans=0def count1(n):res=0while n:res+=n&1 n>>=1return res #计算1的个数for i in range(left,right+1):tem=count1(i)flag=True if tem!=1 else False #判断是不是素数for j in range(2,tem//2+1):if tem%j == 0:flag=False breakif flag:ans+=1return ans

2.二进制间距

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。

如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。

方法一:位运算模拟 

#方法一:位运算模拟
def binaryGap(n):res=[] #记录下标ind=0  while n :if n&1==1:res.append(ind)ind+=1n>>=1if len(res)<=1:return 0 #特殊情况return max([res[i+1]-res[i] for i in range(0,len(res)-1)]) #相邻1的最大值

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"力扣刷题 day53:10-23":http://eshow365.cn/6-23274-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!