博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 762. Prime Number of Set Bits in Binary Representation
阅读量:6829 次
发布时间:2019-06-26

本文共 2111 字,大约阅读时间需要 7 分钟。

Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime number of set bits in their binary representation.

(Recall that the number of set bits an integer has is the number of 1s present when written in binary. For example, 21 written in binary is 10101 which has 3 set bits. Also, 1 is not a prime.)

 

Example 1:

Input: L = 6, R = 10Output: 4Explanation:6 -> 110 (2 set bits, 2 is prime)7 -> 111 (3 set bits, 3 is prime)9 -> 1001 (2 set bits , 2 is prime)10->1010 (2 set bits , 2 is prime)

Example 2:

Input: L = 10, R = 15Output: 5Explanation:10 -> 1010 (2 set bits, 2 is prime)11 -> 1011 (3 set bits, 3 is prime)12 -> 1100 (2 set bits, 2 is prime)13 -> 1101 (3 set bits, 3 is prime)14 -> 1110 (3 set bits, 3 is prime)15 -> 1111 (4 set bits, 4 is not prime)

Note:

  1. L, R will be integers L <= R in the range [1, 10^6].
  2. R - L will be at most 10000.

解法1:

直接暴力

class Solution(object):    def countPrimeSetBits(self, L, R):        """        :type L: int        :type R: int        :rtype: int        """        # for echo num:        #    count bits in num and judge if it is prime                prime_nums = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31}                def count_1bits(n):            ans = 0            while n:                ans += 1                n = n & (n-1)            return ans                ans = 0        for n in range(L, R+1):            bits = count_1bits(n)            if bits in prime_nums:                ans += 1        return ans

解法2:使用dp,比较巧妙!因为 数字num中1的个数=num/2中1的个数+num末尾数字是否为1

虽然会说超时,但还是值得掌握的。

class Solution(object):    def countPrimeSetBits(self, L, R):        """        :type L: int        :type R: int        :rtype: int        """              prime_nums = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31}                def count_bits(n):            bits = [0]*(n+1)            for i in range(1, n+1):                bits[i] = bits[i>>1] + (i&1)            return bits        ans = 0        bits = count_bits(R)        for n in range(L, R+1):            if bits[n] in prime_nums:                ans += 1                        return ans

 

转载地址:http://nqjkl.baihongyu.com/

你可能感兴趣的文章
关于opencv中人脸识别主函数的部分注释详解。
查看>>
SQLServer内核架构剖析 (转载)
查看>>
Android 风格化的 Toggle Buttons
查看>>
Eclipse中SVN的安装步骤(两种)和用法
查看>>
安全运维之:网络实时流量监测工具iftop
查看>>
在 Windows上配置NativeScript CLI
查看>>
ubuntu14.04 qt4 C++开发环境搭建
查看>>
iOS 通讯录-获取联系人属性
查看>>
HTML5 文件域+FileReader 读取文件(一)
查看>>
有return的情况下try catch finally的执行顺序
查看>>
OSI七层模型具体解释
查看>>
9.中位数与顺序统计量
查看>>
第二章 知识图谱——机器大脑中的知识库
查看>>
Android 从清单配置文件元数据中获取值
查看>>
UML用例图
查看>>
Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项
查看>>
Objective-C:MRC(引用计数器)获得对象所有权的方式(init、retain、copy等)
查看>>
PowerShell 在线教程 4
查看>>
不要让你的未来,现在恨自己
查看>>
jquery表单验证
查看>>