338.Counting Bits
Question
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
.
Algorithm
This question is actually asking us how do you count the 1's in an effective way.
By utilizing n&n-1
, we could zero out the least significant nonzero bit. Nothing to discuss, just a trick.
Code
class Solution {
public int[] countBits(int n) {
int[] ans = new int[n + 1];
for (int i = 0; i <= n; i++) {
ans[i] = helper(i);
}
return ans;
}
private int helper(int n) {
int count = 0;
while (n != 0) {
count++;
n &= n-1; // zeroing out the least significant nonzero bit
}
return count;
}
}