关于一个求二进制数中1的个数的几种算法

求二进制数中1的个数的几种算法

问题描述

(这是本人的LeetCode上的firstblood,见笑了)
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.
翻译:给定一个非负整数,对于每个从0到该整数的数 i ,计算他们的二进制中有多少个’1’,并将他们返回到一个数组中。
由于题目中有明确指出是要求运行时间不能超过O(n*sizeof(integer)),空间复杂度又不能超过O(n)。
我的答题代码如下:

public class Solution {
    public int[] countBits(int num) {
        int[] a = new int[1000000];
        a[0] = 0;
        for(int i = 1,t;i <= num;i++){
            t = i - ((i >> 1) & 033333333333) - ((i >> 2) & 011111111111);
            a[i] = ((t + (t >> 3)) & 030707070707) % 63;
        }
        a = Arrays.copyOfRange(a,0,num+1);
        return a;
    }
}

下面我来说说我想到的几种方法吧。

算法1:

这个算法最好,可能运行速度会稍微慢一点,但是这个核心代码就两行,很整洁。(我上面的答题代码就是用这方=算法的)

——————————————— 分割线 —————————————————–

以上内容编辑于 2016年03月26日 23:44:57 ,由于放在草稿箱太久,现在把重新出来发布

猜你喜欢

转载自blog.csdn.net/u014306011/article/details/50989735
今日推荐