Counting Bits LeetCode
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:
0 <= n <= 105
Follow up:
It is very easy to come up with a solution with a runtime of O(n log n). Can you do it in linear time O(n) and possibly in a single pass?
Can you do it without using any built-in function (i.e., like __builtin_popcount in C++)?
Approach 1 : Using Builtin function
Approach 2: Using Left Shift in the Outer Loop
๐ Explanation:
1 << i
(Left Shift)
-
1 << 0
→ 0001 → Checks the 1st bit -
1 << 1
→ 0010 → Checks the 2nd bit -
1 << 2
→ 0100 → Checks the 3rd bit -
And so on…
We use this to create a bitmask and check every bit of the number using:
if ((num & (1 << i)) != 0)
If the result is not zero, that bit is 1
.
Loop i = 0: 1 << 0 = 0001 → 0101 & 0001 = 0001 → count++
Loop i = 1: 1 << 1 = 0010 → 0101 & 0010 = 0000 → skip
Loop i = 2: 1 << 2 = 0100 → 0101 & 0100 = 0100 → count++
Comments
Post a Comment