【解题报告】算法零基础之python解决位与相关问题

一、今天的题目内容是关于一些位与的

学会写代码,成为一个优雅的程序员!!!

二、题目解析:

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的个数与数字的映射关系;

最后排序拼接。

三、刷题感悟

零基础算法也是需要有一定的知识积累的,既然是零基础,我们就可以在这其中边补知识边学习算法,就像今天的题目是关于位与的,我会在一定程度上往这个方面去想,但有时候也确实想不出来,可以先参考别人的,我们去补相应的算法,学到对应的东西就是最好的结果!

毕竟,坚持努力就一定会有回报!

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MUSE_X

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

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

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

打赏作者

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

抵扣说明:

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

余额充值