原题
https://leetcode-cn.com/problems/counting-bits/
思路
动态规划,res[i] = res[ i&(i-1) ] + 1;
1000 8
1001 9
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15
这里一定要搞懂 i&(i-1) 的结果,再+1即可,动态规划由此得来
题解
package com.leetcode.code;
import sun.tools.java.BinaryCode;
/**
* @Description:
* @ClassName: Code338
* @Author: ZK
* @Date: 2021/3/3 23:14
* @Version: 1.0
*/
public class Code338 {
public static void main(String[] args) {
int x = 11;
int y = 12;
System.out.println(Integer.toBinaryString(x));
System.out.println(Integer.toBinaryString(y));
System.out.println(Integer.toBinaryString(x & y));
System.out.println(x & y);
}
public static int[] countBits(int num) {
int[] res = new int[num+1];
for (int i = 1; i <= num; i++) {
res[i] = res[ i&(i-1) ] + 1;
}
return res;
}
}