剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。
输入: n = 2
输出: [0,1,1]
解释: 0 --> 0
1 --> 1
2 --> 10
思路比较简单,就是将每个数转换成二进制字符串,再进行判断每个数的二进制形式有几个1。两个for循环就可以完成。
class Solution {
public int[] countBits(int n) {
int[] res = new int[n+1];
for(int i=0;i<n+1;i++){
String b = Integer.toBinaryString(i);
int num=b.length();
int nums=0;
for(int j=0;j<num;j++){
if(b.charAt(j)=='1')
nums++;
}
res[i] = nums;
}
return res;
}
}
还有一种方法,使用bitCount方法
就是计算整数转换成二进制后的1的个数。
class Solution {
public int[] countBits(int n) {
int[] res = new int[n+1];
for(int i=0;i<n+1;i++){
res[i] = Integer.bitCount(i);
}
return res;
}
}