Leetcode 338 Counting Bits

来源:互联网 发布:js atan2函数 编辑:程序博客网 时间:2024/06/01 18:34

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

Follow up:

  • It is very easy to come up with a solution with run time O(n*sizeof(integer)). But can you do it in linear time O(n) /possibly in a single pass?
  • Space complexity should be O(n).

  • Can you do it like a boss? Do it without using any builtin function like __builtin_popcount in c++ or in any other language.
撸代码还是需要脑子啊。。
这种是dp的做法。。
港真 
popcount 这种做法
for (count = 0; x != 0; ++count)          x &= x - 1; //zeroing out the least significant nonzero bit        return count;
真赞
public class Solution {    public int[] countBits(int num) {        int[] result = new int[num + 1];        for(int i = 1; i <= num; i++){            result[i] = result[i&(i-1)] + 1;        }        return result;    }}

还有一种就是 因为bit数目其实是有规律可循的,在num是2的次方的前面一个达到小高峰,因此可以计算num前面的结果来推算

b其实是从1开始的

P(x+b)=P(x)+1,b=2m>x




0 0
原创粉丝点击