博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode Number of 1 Bits
阅读量:5098 次
发布时间:2019-06-13

本文共 1024 字,大约阅读时间需要 3 分钟。

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the ).

For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.


解题思路:

快速法,这种方法速度比较快,其运算次数与输入n的大小无关,只与n中1的个数有关。如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。其原理是不断清除n的二进制表示中最右边的1,同时累加计数器,直至n为0。

为什么n &= (n – 1)能清除最右边的1呢?因为从二进制的角度讲,n相当于在n - 1的最低位加上1。举个例子,8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右边的1(其实就是最高位的1,因为8的二进制中只有一个1)。再比如7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110),清除了7的二进制表示中最右边的1(也就是最低位的1)。


Java code:

// you need to treat n as an unsigned value    public int hammingWeight(int n) {        int num = 0;        while(n!=0) {            n &= n-1;            num +=1;        }        return num;    }

Reference:

1. https://leetcode.com/discuss/27609/short-code-of-c-o-m-by-time-m-is-the-count-of-1s

2. http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html

 

转载于:https://www.cnblogs.com/anne-vista/p/4794400.html

你可能感兴趣的文章
Fiddler基本用法:手机抓包
查看>>
poj 1328 Radar Installation 排序贪心
查看>>
数组与字符串 1.6
查看>>
信用卡还款项目(同事封装的ajax)
查看>>
java基本概念
查看>>
Struts2学习笔记(六) 结果(Result)(上)
查看>>
ajax提交写法
查看>>
Java编程语言基础 第三章 if嵌套分支用法
查看>>
判断质数的方法
查看>>
安全和共享设置
查看>>
树链剖分
查看>>
python常用模块(一)
查看>>
css例子
查看>>
AOJ 759.会绕圈的数
查看>>
五种绘图模式和四种渲染模式
查看>>
easywechat (在thinkphp5中使用easywechat完成微信网页认证)
查看>>
android语言适配
查看>>
动态加载so文件
查看>>
Android Service实现双向通信(一)
查看>>
【Unity Tips】备忘录(扫盲篇)
查看>>