338. Counting Bits

Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.

Example: For num = 5 you should return [0,1,1,2,1,2].

Idea: Find the pattern in this sequence

class Solution {
public:
    vector<int> countBits(int num) {
        vector<int> r = vector<int>();
        r.reserve(num+1);
        r.push_back(0); // non negative int
        if(num == 0) return r;
        r.push_back(1); 
        if(num == 1) return r;
        
        for(int p1=1,p2=2;r.size() <= num;p1*=2,p2*=2){
            for(int j=p1;j<p2 && r.size() <= num;j++) r.push_back(r[j]);
            for(int j=p1;j<p2 && r.size() <= num;j++) r.push_back(r[j] + 1);
        }
        return r;
    }
};

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    张土汪阅读 9,450评论 0 31
  • 我一直觉得对明星的喜爱没什么不好,前提不盲目、辨是非。 没有什么特别喜欢的女明星,也没有特别讨厌的,可能因为是同性...
    只一点阅读 33评论 0 0
  • 一、产品简介 TunesGo for Mac是 Wondershare面向海外发布的一款苹果手机设备付费管理软件。...
    渡边不纯阅读 214评论 0 1
  • 上了彭小六的知识管理训练营,知道了快速阅读这一利器。1个小时读完一本书,多爽啊。 适用边界 首先,速读的书适用于实...
    懒虫子的美丽人生阅读 75评论 3 3
  • 看到一篇关于自律的文章,深深的震撼了,厉害的人从来都是自律的,没有任何借口和理由去编织谎言 说到为什么要自律? 1...
    素人小白阅读 50评论 0 0