比特位技术的解题思路:
方法一: 动态规划
1.arr[i]=arr[i&(i-1)]+1
方法二: 遍历每一个数字,获得每个数字的1的个数
代码
public static int[] countBits(int num) {
int[] arr=new int[num+1];
for(int i=0;i<=num;i++){
int oneNum = getOneNum(i);
arr[i]=oneNum;
}
return arr;
}
public static int[] countBits2(int num) {
int[] arr=new int[num+1];
for(int i=1;i<=num;i++){
arr[i]=arr[i&(i-1)]+1;
}
return arr;
}
public static int getOneNum(int num){
int count=0;
while(num>0){
count++;
num=num&(num-1);
}
return count;
}
public static void main(String[] args) {
int oneNum = getOneNum(10);
System.out.println(oneNum);
int[] nums = countBits(5);
System.out.println(Arrays.toString(nums));
int[] nums2 = countBits2(5);
System.out.println(Arrays.toString(nums2));
}
来源:CSDN
作者:houjibofa2050
链接:https://blog.csdn.net/u011243684/article/details/104147184