编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

示例 1:

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

示例 2:

输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。

示例 3:

输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。

提示:

  • 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
  • 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3

做法有多种,比较取巧的一种是将n & (n-1),得到的结果是去除掉n的二进制中最靠右的一个1,这种做法比较快捷,避免了固定循环32次来查找1的位移做法。

代码如下:

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

特别注意:在java中,所有数都是以二进制补码形式存放的,并且没有无符号的类型,所以假设是对无符号数进行操作,需要使用无符号移位操作符>>>来进行位移,如果单纯使用>>来,则是表示有符号位移。

public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count = 0;
while (n != 0 ) {
if ((n & 1) != 0) {
count++;
}
n >>>= 1;
}
return count;
}
}

最新文章

  1. Django 步骤
  2. paip.http 404错误 的解决
  3. Open vSwitch简述
  4. MongoDB:Replica Set 之操作日志 Oplog
  5. QTabWiget Change Color 改变颜色(每个QWidget都有一个自己的调色板palette,设置它的颜色,然后setAutoFillBackground即可)
  6. 【Demo 0009】Android 组件(BroadcastReceiver)
  7. F数圈圈
  8. 关于如何通过kali linux 攻击以及破解WPA/WPA2无线加密
  9. Centos7安装搜狗输入法.
  10. Node.js(day6)
  11. 第九节: 利用RemoteScheduler实现Sheduler的远程控制
  12. flutter_webview_plugin 无法加载网页的异常处理
  13. MySQL 和 Oracle 在 MyBatis 使用中的区别
  14. ASP.NET MVC Area 区域
  15. 11i - 12 Gather Schema Statistics fails with Ora-20001 errors after 11G database Upgrade (文档 ID 781813.1)
  16. Java编写验证码
  17. Macbook pro睡眠状态恢复后没声音的解决办法
  18. HDUOJ1060Leftmost Digit
  19. ise和modelsim联合仿真的一些准备
  20. 从VS2010跳跃到VS2017

热门文章

  1. redis内存数据的持久化方式
  2. jmeter基本组件介绍
  3. 盘点那些适配Linux的国产常用软件
  4. Spring Boot - Logback配置日志要考虑哪些因素
  5. 关于举办【福州】《K8S社区线下技术交流会》的问卷调查
  6. 史上最骚最全最详细的IO流教程,没有之一!
  7. redis系列之------对象
  8. Topshelf+Quartz在.Net Core框架下的实现
  9. [git]将代码上传到github
  10. 0818NOIP模拟测试25——B卷简记