Given two integersLandR, 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 of1s present when written in binary. For example,21written in binary is10101which 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)

按照要求算,没啥说的

class Solution {
    public int countPrimeSetBits(int L, int R) {
        int count = 0;

        for(int i = L; i <= R; i++) {
            if(isPrime(getSetBitCount(i)))
                count++;
        }

        return count;
    }

    public boolean isPrime(int num) {
        if(num <= 1)
            return false;

        for(int i = 2; i < num; i++) {
            if(num % i == 0)
                return false;
        }

        return true;
    }

    public int getSetBitCount(int num) {
        int count = 0;
        for(int i = 0; i < 32; i++) {
            if(((num >> i) & 1) == 1)
                count++;
        }

        return count;
    }
}

results matching ""

    No results matching ""