← All problems

338. Counting Bits

EasyOpen on LeetCodeProblem statement

Problem Statement

338. Counting Bits

Easy


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.

 

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

 

Constraints:

 

Follow up:

Notes / Approach

![image](https://github.com/user-attachments/assets/77d7057f-32d9-40e8-a9eb-c34b12deff7d)

Java

Source file
class Solution {
    public int[] countBits(int n) {
        if (n == 0)
            return new int[]{0};
        int[] dp = new int[n + 1];
        dp[1] = 1;
        for (int i = 1, ceil = 1; i <= n; i++) {
            if (i == ceil * 2) {
                ceil *= 2;
                dp[i] = 1;
            } else
                dp[i] = dp[ceil] + dp[i - ceil];
        }
        return dp;
    }
}