关闭

Easy-题目15:191. Number of 1 Bits

199人阅读 评论(0) 收藏 举报
分类:

题目原文:
Write a function that takes an unsigned integer and returns the number of ’1’ bits it has (also known as the Hamming weight).

For example, the 32-bit integer ’11’ has binary representation 00000000000000000000000000001011, so the function should return 3.
题目大意:
给出一个整数,求它的二进制形式里面有多少个‘1’。
题目分析:
如果n 只有1位(0或1),直接返回n,否则返回n的最后一位加上n右移一位所得数中1的个数(递归计算)。
源码:(language:c)

int hammingWeight(uint32_t n) {
    return (n==0||n==1)?n:(hammingWeight(n/2)+n%2);
}

成绩:
4ms,beats3.83% 众数4ms,96.17%
Cmershen的碎碎念:
Java中有一个库函数可以水过此题:Integer.bitCount(n);
附JDK中bitCount的算法(大概是一个很巧妙的”分治算法”的位运算,复杂度O(1))

public static int bitCount(int i) {
        // HD, Figure 5-2
        i = i - ((i >>> 1) & 0x55555555);
        i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
        i = (i + (i >>> 4)) & 0x0f0f0f0f;
        i = i + (i >>> 8);
        i = i + (i >>> 16);
        return i & 0x3f;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:64775次
    • 积分:3292
    • 等级:
    • 排名:第10727名
    • 原创:270篇
    • 转载:53篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论