338. 比特位计数
题目描述: 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
示例 1:
输入: 2
输出: [0,1,1]
示例 2:
输入: 5
输出: [0,1,1,2,1,2]
法一:
class Solution {
public int[] countBits(int num) {
int cnt [] = new int[num+1];
for( int i = 0 ; i <= num ; i++ ){
cnt[i] = switchto(i);
}
return cnt;
}
public int switchto(int x){
int total = 0;
while (x != 0 ){
x = x & (x-1); //x&(X-1) 表示将x所表示的二进制数的最低位1变为0;
total++;
}
return total;
}
}
法二:
class Solution {
public int[] countBits(int num) {
int cnt [] = new int[num+1];
for(int i = 1 ; i <=num ; i++){
cnt[i] = cnt[i&(i-1)] + 1;
}
return cnt;
}
}