762. Prime Number of Set Bits in Binary Representation

762. Prime Number of Set Bits in Binary Representation


題目

Leetcode題目

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 = 10
Output: 4
Explanation:
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 = 15
Output: 5
Explanation:
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.利用位運算來數1的個數
【n爲[L, R]的數字個數,len爲R的二進制的位數】

  • 時間複雜度:O(n * m)
  • 空間複雜度:O(1)
// First Solution(Runtime: 39ms)
class Solution {
public:
    int countPrimeSetBits(int L, int R) {
        set<int> primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
        int result = 0;
        for (int i = L; i <= R; i++) {
            // determine every number in [L, R]
            int bits = 0;
            for (int b = i; b; b >>= 1) { // shift operation
                // determine if the end is 1
                bits += b & 1;
            }
            result += primes.count(bits);
        }
        return result;
    }
};

2.利用bitset來數1的個數
【n爲[L, R]的數字個數,len爲R的二進制的位數】

  • 時間複雜度:O(n * m)
  • 空間複雜度:O(1)

雖然複雜度沒有太大的變化,但是利用bitset可以簡化十進制轉換爲二進制。
並且bitset中有函數count()可以統計其中1的個數。

// Second Solution(Runtime: 21ms)
class Solution {
public:
    int countPrimeSetBits(int L, int R) {
        set<int> primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
        int result = 0;
        for (int i = L; i <= R; i++) {
            bitset<100> b(i);
            result += primes.count(b.count());
        }
        return result;
    }
};
發佈了106 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章