leetCode 338. Counting Bits | Dynamic Programming | Medium

338. Counting Bitside


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

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

題目大意:orm

給一個數字,好比5,那麼5以前全部的整數的每一個二進制表示中1的個數。it

思路:io

數字 二進制表示 二進制中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次方的元素。


代碼以下:table

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;
    }
};


2016-09-01 18:57:26class

相關文章
相關標籤/搜索