题目描述:

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。比如输入9,9的二进制表示是1001,1的个数是2,所以输出2。

这有一个重要结论:一个数与该数减一的结果进行与运算,会把该数右边(低位)第一个1变为0,而该位左边保持不变(高位)。可以举一个简单的例子进行证明:比如1100(对应十进制是12),减去1之后的结果是1011(也就是十进制的11),两个数进行与运算之后,我们发现最后的结果是1000(对应十进制的8,当然这个8与后面没有关系,可以略过)。这样我们每进行一次的与运算就消去一个1,这样消到最后肯定是0了,所以我们可以在代码中以这个为循环的终止条件。

基于以上分析,可以写出如下的代码(已被牛客AC):

package com.rhwayfun.offer;public class NumberOf1 {public int numberOf1(int n) {int sum = 0;while(n != 0){sum++;n = n & (n - 1);}return sum;}public static void main(String[] args) {int count = new NumberOf1().numberOf1(9);System.out.println(count);}
}

剑指offer系列之十:二进制中1的个数相关推荐

  1. 剑指Offer - 面试题15. 二进制中1的个数(位运算)

    1. 题目 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此,如果输入 9,则该函数输出 2. 示例 1: 输入:0000 ...

  2. 剑指offer面试题[10]-二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 分析: 这是一道很基本的考察二进制和位运算的面试题.思路:先判断证书二进制表示中最右边的一位是不是1.接着再把输入的数字右移 ...

  3. 剑指offer面试题15. 二进制中1的个数(位运算)

    题目描述 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此,如果输入 9,则该函数输出 2. 思路 详见链接 代码 cla ...

  4. 【剑指offer-Java版】10二进制中1的个数

    二进制中1的个数: 思路一:循环右移给定的数,但是存在负数出现死循环的问题 思路二:声明一个变量flag并初始化为1,然后循环右移flag,循环次数是和给定数的精度也就是位数有关 思路三:用了二进制一 ...

  5. 剑指offer系列之六十:序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 首先得理解题目的意思,序列化就是返回一个带有#和逗号的字符串.反序列化就是根据带有#和逗号的字符串返回一棵二叉树.比如对于二叉树 1/ \2 ...

  6. 牛客网(剑指offer) 第二十二题 从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. <?php/*class TreeNode{var $val;var $left = NULL;var $right = NUL ...

  7. 牛客网(剑指offer) 第十二题 数值的整数次方

    //题目描述 //给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. <?phpfunction Power($base, $expo ...

  8. 【剑指 offer】(十)—— 二进制形式 1 的个数

    可能引起死循环的解法 int numOf1(int n) {int cnt = 0;while (n){if (n & 1)++cnt;n >>= 1;}return cnt; } ...

  9. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

最新文章

  1. Java学习之if-else简单方法小程序
  2. 百度实名制后如何进行网站优化?
  3. mybatis支持驼峰自动转换sql吗_mybatis-plus返回map自动转驼峰配置操作
  4. 网线直连Window和Ubuntu
  5. 先弄个XML解析器代码抄一抄 慢慢研究 O(∩_∩)O哈哈~
  6. 单片机预备知识(电平、进制转换、字节、数据类型)
  7. Spring Data JPA 从入门到精通~JpaRepository介绍
  8. 外贸业务员会计算机知识,外贸业务员、电子商务
  9. Django 文件下载
  10. python的pyaudio教程入门_Python音频操作工具PyAudio上手教程详解
  11. vs2015离线安装QT的vsix工具
  12. Similarity-Preserving Knowledge Distillation
  13. php唯美博客,24个很酷的PHP开源库
  14. 熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】
  15. Codeforces Round #486 (Div. 3)
  16. WPS2019 For Ubuntu
  17. 面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?
  18. 网络爬虫获取地铁人流量数据
  19. python pandas dataframe 获取除了指定列以外的所有列
  20. win10安装.NET Framework 3.5的方法

热门文章

  1. Ubuntu中如何使得程序在后台运行
  2. util.Date与sql.Date的相互转换以及区别
  3. 【php】运算符优先级界定
  4. openresty nginx升级版
  5. Invalid bound statement (not found): com.xsw.dao.CategoryDao.getCategoryById] with root cause
  6. R读取excel文件乱码 read.xlsx() 解决方法
  7. 解决gitosis中authorized_keys不自动更新问题
  8. 大数处理之一(加法和乘法)
  9. svn服务器搭建及使用 二
  10. Windows Live Writer推荐SyntaxHighlighter代码着色插件