338. Counting Bits

1. Description

Given an integer n, return an array ans of length n + 1 such that for each i (0 <= i <= n), ans[i] is the number of 1’s in the binary representation of i.

2. Example

Example 1

Input: n = 2
Output: [0,1,1]
Explanation:
0 –> 0
1 –> 1
2 –> 10

Example 2

Input: n = 5
Output: [0,1,1,2,1,2]
Explanation:
0 –> 0
1 –> 1
2 –> 10
3 –> 11
4 –> 100
5 –> 101

3. Constraints

  • 0 <= n <= $10^5$

4. Solutions

Bit Manipulation && Dynamic Programming

Time complexity: O(n)
Space complexity: O(1)

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

        return bit_count;
    }
};
comments powered by Disqus