题目描述

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

提示:

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

示例 1:

输入:n = 11 (控制台输入 00000000000000000000000000001011)
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。
示例 2:

输入:n = 128 (控制台输入 00000000000000000000000010000000)
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 ‘1’。
示例 3:

输入:n = 4294967293 (控制台输入 11111111111111111111111111111101,部分语言中 n = -3)
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 ‘1’。

提示:

输入必须是长度为 32 的 二进制串 。

思想

一个数减1,然后再和他本身进行按位与运算,就会把这个数最右边的1消掉。原理是:①一个数减去1之后,它最右边的那个1位置的右边会全变成1,左边不变。②这个数再和本身按位与运算后,前面的一样,所以没变;最右边的那个1及它左边的数相异,全变成零了。

C++实现

class Solution {public:int hammingWeight(uint32_t n) {int count=0;while(n){count++;n&=n-1;}return count;}
};

python实现

class Solution:def NumberOf1(self , n: int) -> int:count=0;if n<0:  #因为python的变量没有长度,整数又是以补码的形式存储的,所以前面都是1n&=0xffffffff #将32位之前的1都去掉了while n:count+=1 #python变量不允许改变,此语句实际是创建了一个新的变量然后赋值过去了n&=(n-1)return count

积累:①python变量没有长度。②python不能自增。

相关题目

用一条语句判断这个整数是不是2的整数次方。(这个数中只能有一个1)

if(n&&n&(n-1)==0)//若一个数中只有一个1,那么去掉一个1之后,这个数就变成0了。

二进制中1的个数——《剑指offer》相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java

    <LeetCode力扣练习>剑指 Offer 15. 二进制中1的个数 Java 一.资源 题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ...

  2. [剑指Offer]12.二进制中1的个数

    题目 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路 把一个整数减去1,再和原整数做与运算,会把整数最右边一个1变成0.那么一个整数的二进制表示中有多少个1,就可以进行多次这样 ...

  3. 剑指Offer #11 二进制中1的个数(想不到的骚操作)

    题目来源:牛客网-剑指Offer专题 题目地址:二进制中1的个数 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目解析 对于这种涉及位运算的题目,我们首先要了解基本的位 ...

  4. 《剑指offer》-- 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格

    一.把数组排成最小的数: 1.题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为 ...

  5. 【剑指offer15.二进制中1的个数】——位操作(左移右移等)

    目录 二进制的表示 二进制的位操作 应用: 剑指offer15.统计二进制中1的个数(多种方法,位右移操作.与操作等) 转自:https://www.jianshu.com/p/3a31065a8e5 ...

  6. 【LeetCode】剑指 Offer 15. 二进制中1的个数

    [LeetCode]剑指 Offer 15. 二进制中1的个数 文章目录 [LeetCode]剑指 Offer 15. 二进制中1的个数 一.逐位判断 二.巧用 n&(n−1) 一.逐位判断 ...

  7. 剑指offer——面试题10:二进制中1的个数

    剑指offer--面试题10:二进制中1的个数 关于负数的自己没想出来,这是书中的两种算法,关于位运算的知识还是得要学习一个啊... Solution1: class Solution {public ...

  8. 【剑指Offer】个人学习笔记_15_二进制中1的个数

    目录 题目: [剑指 Offer 15. 二进制中1的个数](https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/) 题 ...

  9. 【剑指 Offer_15】二进制中1的个数_PythonJava_逐位相与解法

    剑指 Offer 15. 二进制中1的个数 "前戏" 正题--剑指 Offer 15. 二进制中1的个数 题目描述 方法一.逐位相与 Python解法 Java解法 复杂度分析 方 ...

  10. 剑指 Offer 15. 二进制中1的个数 + 191. 位1的个数(n(n-1)实例)

    一.题目:剑指 Offer 15. 二进制中1的个数 请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此, ...

最新文章

  1. ORA-01113 file 1 needs media recovery
  2. Ubuntu 16.04通过Unity Tweak Tool实现点击图标最小化
  3. python xlrd_python模块之xlrd
  4. 企业级java springboot b2bc商城系统开源源码二次开发-云架构代码结构构建(五)...
  5. Windows Server 2008十大新功能
  6. mysql格式分隔符row_MySQLRow格式Binlog的解析(1)
  7. 15.使用using和try/finally来做资源清理
  8. android addtextchangedlistener参数,【Android】关于addTextChangedListener()方法的上机记录...
  9. 通过phantomjs 进行页面截图
  10. 网上讨论“电商平台打败了实体店”?
  11. 日月如梭,玩转JavaScript日期
  12. scala面试题简要总结
  13. C# 处理应用程序减少内存占用
  14. 英读廊——如果运动引起摩擦,摩擦生热,为什么风吹得越快却越冷
  15. 重装系统要花钱?教你免费一键重装win10系统
  16. 免费视频转文字-音频转文字软件:网易见外工作台, Speechnotes, autosub, Speech to Text, 百度语音识别
  17. IOS 定位 CLLocationManager
  18. 阿里的Maven仓库地址
  19. 到底买苹果XS还是XR_苹果xs和苹果xr内部相爱相杀:队友之间该如何选择?
  20. GeoHash算法详解

热门文章

  1. 将一个字符串首字母转大写(英文)
  2. 用户留存率是什么?如何用sql求出次日留存率?
  3. 51CTO学院 c++视频
  4. 行云集团独家冠名纪录片《风从东风来》,讲述中国品牌故事
  5. LightGBM Python 软件包的基本演练.
  6. Linux服务器配置 PC NVR
  7. DHCP 自动分配IP地址 ,IP隧道
  8. 如何优雅地蹭邻居家的wifi
  9. android连接ios热点超时,Android19连接iOS13个人热点失败
  10. npx:调用项目内部安装的模块