美文网首页
[LeetCode]338. Counting Bits

[LeetCode]338. Counting Bits

作者: Eazow | 来源:发表于2016-05-28 17:31 被阅读201次

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

    题目

    给定一个非负整数num,计算出从0到num的每个数的二进制中包含1的个数

    方法

    对于数字n,它二进制表示形式中1的个数bits[n] = bits[n>>1]+n&1

    c代码

    #include <assert.h>
    #include <stdlib.h>
    
    /**
     * Return an array of size *returnSize.
     * Note: The returned array must be malloced, assume caller calls free().
     */
    int* countBits(int num, int* returnSize) {
        int i = 0;
        int* bits = (int *)malloc(sizeof(int) * (num+1));
        bits[0] = 0;
        for(i = 0; i <= num; i++) {
            bits[i] = bits[i>>1] + (i&1);
        }
        *returnSize = num+1;
        return bits;
    }
    
    int main() {
        int returnSize = 0;
        int* bits = countBits(5, &returnSize);
        assert(bits[0] == 0);
        assert(bits[1] == 1);
        assert(bits[2] == 1);
        assert(bits[3] == 2);
        assert(bits[4] == 1);
        assert(bits[5] == 2);
        assert(returnSize == 6);
    
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:[LeetCode]338. Counting Bits

          本文链接:https://www.haomeiwen.com/subject/uplfdttx.html