0
点赞
收藏
分享

微信扫一扫

剑指Offer003:前 n 个数字二进制中 1 的个数

北邮郭大宝 2022-02-19 阅读 61

方法一:bitset容器

class Solution {
public:
    vector<int> countBits(int n) {
        vector<int> ans;
        for(int i=0;i<=n;i++){
            bitset<32> bs(i);
            ans.push_back((int)bs.count());
        }
        return ans;
    }

};

方法二:位运算 

class Solution {
public:
    //如果当前数i为偶数,则它是i/2左移1位后的结果 ,即i的二进制数中1的个数和i/2一样
        //如果当前数1位奇数,则它是i/2左移1位后+1的结果,即i的二进制数中1的个数=(i/2)的个数+1
    vector<int> countBits(int n) {//位运算
        vector<int> ans(n+1,0);
        for(int i=1;i<=n;i++){
            ans[i]=ans[i>>1]+(i&1);
        }
        return ans;
    }
};

 &优先级很低,需要括号

举报

相关推荐

0 条评论