描述

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

输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数。

解析

消除最后的1

观察一下 n 与 n-1 这两个数的二进制表示:对于 n-1 这个数的二进制来说,相对于 n 的二进制,它的最末位的一个 1 会变成 0,最末位一个 1 之后的 0 会全部变成 1,其它位相同不变。

比如 n = 8888,其二进制为 10001010111000

则 n - 1 = 8887 ,其二进制为 10001010110111

通过按位与操作后:n & (n-1) = 10001010110000

也就是说:通过 n&(n-1)这个操作,可以起到消除最后一个1的作用。

所以可以通过执行 n&(n-1) 操作来消除 n 末尾的 1 ,消除了多少次,就说明有多少个 1 。

简单遍历

每次与&1,如果为1,说明最后一位为1,再右移一位。

代码

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

最新文章

  1. Android studio 出现 Unsupported major.minor version 52.0
  2. Windows下获取本机IP地址方法介绍
  3. const成员函数
  4. 从零开始写一个武侠冒险游戏-6-用GPU提升性能(1)
  5. UEditor和CKEditor配置上传图片,视频,附件
  6. nsight 初级使用指南
  7. 获取其它进程窗口中的状态栏信息(FindWindowEx GetWindowThreadProcessId OpenProcess SendMessage轮番轰炸)
  8. Socket异步通信学习一
  9. windows 批量执行命令的脚本
  10. Oracle游标cursor2显示的游标等
  11. C#开发客户端、JAVA和tomcat开发服务端
  12. ServletConfig、ServletContext属性遍历
  13. sys系统模块
  14. Kostya Keygen#2分析
  15. django中forms和modelform组件的区别
  16. 解决 phpstorm 运行卡,自动关闭等问题
  17. 图像分类(二)GoogLenet Inception_v2:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  18. 前端基础----CSS语法、CSS四种引入方式、CSS选择器、CSS属性操作
  19. 20145215《网络对抗》Exp5 MSF基础应用
  20. 循序渐进学.Net Core Web Api开发系列【10】:使用日志

热门文章

  1. Tomcat 跨域问题的解决
  2. mail命令
  3. Spring Boot的数据访问 之Spring Boot + jpa的demo
  4. Python 模块(module)
  5. cin 与 getchar 中的坑
  6. Android 通过 JNI 访问 Java 字段和方法调用
  7. Linux下HBase和Maven的环境搭建
  8. kbengine学习2 创建项目
  9. ip网关配置
  10. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建子网格