码迷,mamicode.com
首页 > 其他好文 > 详细

leetCode 338. Counting Bits | Dynamic Programming | Medium

时间:2016-09-02 01:02:18      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:dynamic programming

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的个数
000
1
11
2
101
3112
41001
51012
61102
71113
810001
910012
1010102
1110113
1211002
1311013
1411103
1511114
16100001
根据上面分析的到一个规律:每达到2的i次方,就会从第一个元素开始依次加1,赋值给当前元素到下一次达到2的i+1次方的元素。


代码如下:

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:26

本文出自 “做最好的自己” 博客,请务必保留此出处http://qiaopeng688.blog.51cto.com/3572484/1845319

leetCode 338. Counting Bits | Dynamic Programming | Medium

标签:dynamic programming

原文地址:http://qiaopeng688.blog.51cto.com/3572484/1845319

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!