【刷题日记】762. 二进制表示中质数个计算置位

简介: 本次刷题日记的第 25 篇,力扣题为:762. 二进制表示中质数个计算置位 ,简单

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

【刷题日记】762. 二进制表示中质数个计算置位

本次刷题日记的第 25 篇,力扣题为:762. 二进制表示中质数个计算置位简单

一、题目描述:

image.png

清明小长假第 3 天,回到深圳后稍加调整,看看今天 leetcode 是个啥题?还是要保持习惯,每天总要花点时间做点自己想做的事情


仔细看一下是个简单题,今晚应该可以早点睡觉了

二、这道题考察了什么思想?你的思路是什么?

我们还是要认真细致的来查看一下该题本身给我们传达的信息:

  • 题中会给出一个区间,区间内的数据都是整数,我们需要计算出这个区间内的每一个数字的二进制数中 1 的个数
  • 我们需要知道如何去校验一个数是否是质数
  • 完成上述 2 步之后,我们就可以使用傻瓜式的遍历方式来实现本题了

计算一个数的二进制数包含多少个 1 ,我们可以使用辗转相除法来进行处理,当然,我们也可以使用库函数来进行处理,此处我们使用的是 golang ,那么我们直接使用库函数计算的话,可以这样来使用 : bits.OnesCount(具体的 uint 数字)

那么问题就来到了什么是质数了?

如果一个数 大于 1 的数字,并且这个数字只能被 1 和 自身整除,不能被其他任何数字整除,那么这个数字就是 质数

关于如何校验一个数是质数,我们在大学学习 C 语言的时候,就学习并且实践过,在这里咱不再赘述了


三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

编码如下:

func countPrimeSetBits(left int, right int) (res int) {
  // 直接傻瓜式的遍历
    for i:=left;i<=right;i++ {
        // golang 中 使用 bits.OnesCount() 来计算 uint 数中 1 个个数
        if isPrimeNum(bits.OnesCount(uint(i))){
            res++
        }
    }
    return
}
// 校验是否是质数
func isPrimeNum(num int) bool {
    if num < 2 {
        return false
    }
    for i:=2; i*i <= num; i++ {
        if num %i == 0 {
            return false
        }
    }
    return true
}

看了这个题的编码其实也非常的常规

  • 第一步 遍历题目给出的数组
  • 第二步 计算具体数字的二进制数中的 1 的个数
  • 校验传入的数据是否是质数

四、总结:

那么,对于这个题,他的空间复杂度很明显,是 O(1) ,因为我们只引入了常数级别的空间消耗

那么他的时间复杂度是多少呢? xdm 你们有一个清晰的概念吗 ,感兴趣的可以尝试计算一下他的时间复杂度,暂时先不明确的写出来了

原题地址:762. 二进制表示中质数个计算置位

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~


相关文章
【LeetCode-每日一题】-67. 二进制求和
【LeetCode-每日一题】-67. 二进制求和
|
7月前
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
|
7月前
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
|
7月前
|
算法
【一刷《剑指Offer》】面试题 11:数值的整数次方
【一刷《剑指Offer》】面试题 11:数值的整数次方
|
算法 搜索推荐 程序员
C语言第十三练——输入一个正整数,判断这个数是否是素数
C语言第十三练——输入一个正整数,判断这个数是否是素数
130 0
|
机器学习/深度学习 Cloud Native
【刷题日记】67. 二进制求和
本次刷题日记的第 15 篇,力扣题为:67. 二进制求和 ,简单
|
Cloud Native
【刷题日记】693. 交替位二进制数
本次刷题日记的第 16 篇,力扣题为:67. 二进制求和 ,简单
|
Cloud Native
【刷题日记】504. 七进制数
本次刷题日记的第 3 篇,力扣题为:【刷题日记】504. 七进制数 ,简单
|
存储
剑指Offer - 面试题17:打印从1到最大的n位数
剑指Offer - 面试题17:打印从1到最大的n位数
77 0
【每日一题Day41】生成交替二进制字符串的最小操作数 | 模拟 位运算
思路:长度一定的交替二进制字符串有两种可能性,以字符0开头的0101字符串和以字符1开头的1010字符串,因此只需要将字符串s与这两种字符串进行比较,记录不相同的字符个数,最后返回较小值即可
99 0
【每日一题Day41】生成交替二进制字符串的最小操作数 | 模拟 位运算