【LeetCode】338. 比特位计数
1 class Solution { 2 public: 3 vector<int> countBits(int n) { 4 vector<int> ct(n+1,0); 5 for(int i=1;i<=n;++i) 6 { 7 ct[i]=ct[i>>1]+(i&1); //当为奇数时,结果为比他1/2数的含1的个数加1;偶数不变 8 } 9 return ct; 10 } 11 };
递推思想,首先所有的结果初始化为0。
当这个数为偶数时,含1的个数为他的1/2的数含1个数;当为奇数时,结果为他1/2数含1的个数加1。
由于i&1可以提取比特位最后一位来判断奇偶,所以地推表达式为“ct[i]=ct[i>>1]+(i&1)”

浙公网安备 33010602011771号