【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)”

posted @ 2022-01-25 11:37  Jerry2km1  阅读(34)  评论(0)    收藏  举报