一、今天的题目内容是关于一些位与的
学会写代码,成为一个优雅的程序员!!!
二、题目解析:
762.二进制表示中质数个计算置位 难度:简单
class Solution:
def countPrimeSetBits(self,left:int,right:int)->int:
count=0
prime=[2,3,5,7,9,11,13,17,19]
for i in range(left,right+1):
b=bin(i)
num=b.count('1')
if num in prime:
count+=1
return count
这道题目的理解起来还是比较容易的;考虑到数的取值范围小于10的6次方,这也就说明了二进制的位数最多不超过20,直接列出20以内的质数列表;
之后对范围内的数遍历,采用python中bin方法将数转换为二进制,用count方法统计二进制中的1的个数,然后判断置位数是否为质数;
最后输出个数即可!
2. 2的幂 难度:简单
class Solution:
def isPowerOfTwo(self,n:int)->bool:
return n>0 and (n&(n-1))==0
这道题用的位或,一行代码秒杀;
如果一个数是2的幂,它的二进制表示为开头1末尾都为0 ,将其减去1之后变为相反的,若一个数是2的幂,则位或之后必然为0。
3.根据数字二进制下1的数目排序 难度:简单
这道题首先用python的内置函数bin进行二进制转换,采用count统计每个二进制数的1的个数;
采用了哈希表,建立了一个1的个数与数字的映射关系;
最后排序拼接。
三、刷题感悟
零基础算法也是需要有一定的知识积累的,既然是零基础,我们就可以在这其中边补知识边学习算法,就像今天的题目是关于位与的,我会在一定程度上往这个方面去想,但有时候也确实想不出来,可以先参考别人的,我们去补相应的算法,学到对应的东西就是最好的结果!
毕竟,坚持努力就一定会有回报!