338. 比特位计数
描述
给你一个整数 n
,对于 0 <= i <= n
中的每个 i
,计算其二进制表示中 1
的个数 ,返回一个长度为 n + 1
的数组 ans
作为答案。
链接
338. 比特位计数 - 力扣(LeetCode) (leetcode-cn.com)
解法:位运算 判断 奇偶数, + 动态规划
对于所有的数字,只有两类:
奇数:二进制表示中,奇数一定比前面的那个偶数多一个 1,因为多的就是 最低位(二进制下)的1.
偶数
1 class Solution { 2 public int[] countBits(int n) { 3 int[] res = new int[n+1]; 4 res[0] = 0; 5 for(int i = 1; i<= n; i++) { 6 if( (i & 1) == 1) { // 奇数 7 res[i] = res[i-1] + 1; 8 } 9 else { // 偶数 10 res[i] = res[i/2]; 11 } 12 } 13 return res; 14 } 15 }
参考
清晰的思路 - 比特位计数 - 力扣(LeetCode) (leetcode-cn.com)