leetcode算法题总结之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].

一开始看到这个题的时候,还有点迷,不知道该如何下手,这种情况下只能采用枚举的方式找规律。准确说这是一道典型按位运算的题目,位运算符包括了& | 等。

我的解法:

/**
 * 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;
    int * arry;
    arry=(int*)malloc(sizeof(int)*(num+1));
    *returnSize=num+1;
    arry[0]=0;
    for(i=1;i<=num;i++){
        arry[i]=i&1?arry[i/2]+1:arry[i/2];
    }
    return arry;
    
}

这是参考了答案之后的做法,可以看到该解法最经典的地方就是:

arry[i]=i&1?arry[i/2]+1:arry[i/2]; 将 i 和 1 做 &操作,判断最后一位是否有1 ,如果有1,则结果为i除以2的结果加上1,否则等于i除以2后的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值