且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

leetCode 338. Counting Bits | Dynamic Programming | Medium

更新时间:2022-10-03 13:57:46

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].

题目大意:

给一个数字,比如5,那么5之前所有的整数的每个二进制表示中1的个数。

思路:

数字 二进制表示 二进制中1的个数
0 0 0
1
1 1
2
10 1
3 11 2
4 100 1
5 101 2
6 110 2
7 111 3
8 1000 1
9 1001 2
10 1010 2
11 1011 3
12 1100 2
13 1101 3
14 1110 3
15 1111 4
16 10000 1
根据上面分析的到一个规律:每达到2的i次方,就会从第一个元素开始依次加1,赋值给当前元素到下一次达到2的i+1次方的元素。


代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
    vector<int> countBits(int num) {
        vector<int> result;
        if(num == 0)
        {
            result.push_back(0);
            return result;
        }
        if(num == 1)
        {
            result.push_back(0);
            result.push_back(1);
            return result;
        }
        result.push_back(0);
        result.push_back(1);
         
        int temp = 2;
        for(int i = 2; i <=num ; i++)
        {
            if(i == temp*2)
                temp *= 2;
            result.push_back(result[i-temp] + 1);
        }
        return result;
    }
};


本文转自313119992 51CTO博客,原文链接:http://blog.51cto.com/qiaopeng688/1845319