338. Counting Bits

338. Counting Bits

Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary representation and return them as an array.

Example:
For num = 5 you should return [0,1,1,2,1,2].

Follow up:

It is very easy to come up with a solution with run time O(n*sizeof(integer)). But can you do it in linear time O(n) /possibly in a single pass?
Space complexity should be O(n).
Can you do it like a boss? Do it without using any builtin function like __builtin_popcount in c++ or in any other language.

Analysis:
参考了:https://www.hrwhisper.me/leetcode-counting-bits/

Source Code(C++):

#include <iostream>
#include <vector>
using namespace std;

/* class Solution { public: vector<int> countBits(int num) { vector<int> v(num+1, 0); int pow2=1, rest=1; for (int i=1; i<=num; i++){ if (i==pow2){ v[i] = 1; rest = 1; pow2 <<= 1; } else { v[i]=v[rest]+1; rest += 1; } } return v; } }; */


class Solution {
public:
    vector<int> countBits(int num) {
        vector<int> v(num+1, 0);
        for(int i=1; i<=num; i++) {
            v[i] = v[i>>1]+(i&1);
        }
        return v;
    }
};

int main() {
    Solution sol;
    vector<int> v;
    v = sol.countBits(5);

    return 0;
}

你可能感兴趣的:(338. Counting Bits)