二进制中1的个数——《剑指offer》
题目描述
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘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》相关推荐
- 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java
<LeetCode力扣练习>剑指 Offer 15. 二进制中1的个数 Java 一.资源 题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ...
- [剑指Offer]12.二进制中1的个数
题目 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路 把一个整数减去1,再和原整数做与运算,会把整数最右边一个1变成0.那么一个整数的二进制表示中有多少个1,就可以进行多次这样 ...
- 剑指Offer #11 二进制中1的个数(想不到的骚操作)
题目来源:牛客网-剑指Offer专题 题目地址:二进制中1的个数 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目解析 对于这种涉及位运算的题目,我们首先要了解基本的位 ...
- 《剑指offer》-- 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格
一.把数组排成最小的数: 1.题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为 ...
- 【剑指offer15.二进制中1的个数】——位操作(左移右移等)
目录 二进制的表示 二进制的位操作 应用: 剑指offer15.统计二进制中1的个数(多种方法,位右移操作.与操作等) 转自:https://www.jianshu.com/p/3a31065a8e5 ...
- 【LeetCode】剑指 Offer 15. 二进制中1的个数
[LeetCode]剑指 Offer 15. 二进制中1的个数 文章目录 [LeetCode]剑指 Offer 15. 二进制中1的个数 一.逐位判断 二.巧用 n&(n−1) 一.逐位判断 ...
- 剑指offer——面试题10:二进制中1的个数
剑指offer--面试题10:二进制中1的个数 关于负数的自己没想出来,这是书中的两种算法,关于位运算的知识还是得要学习一个啊... Solution1: class Solution {public ...
- 【剑指Offer】个人学习笔记_15_二进制中1的个数
目录 题目: [剑指 Offer 15. 二进制中1的个数](https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/) 题 ...
- 【剑指 Offer_15】二进制中1的个数_PythonJava_逐位相与解法
剑指 Offer 15. 二进制中1的个数 "前戏" 正题--剑指 Offer 15. 二进制中1的个数 题目描述 方法一.逐位相与 Python解法 Java解法 复杂度分析 方 ...
- 剑指 Offer 15. 二进制中1的个数 + 191. 位1的个数(n(n-1)实例)
一.题目:剑指 Offer 15. 二进制中1的个数 请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此, ...
最新文章
- ORA-01113 file 1 needs media recovery
- Ubuntu 16.04通过Unity Tweak Tool实现点击图标最小化
- python xlrd_python模块之xlrd
- 企业级java springboot b2bc商城系统开源源码二次开发-云架构代码结构构建(五)...
- Windows Server 2008十大新功能
- mysql格式分隔符row_MySQLRow格式Binlog的解析(1)
- 15.使用using和try/finally来做资源清理
- android addtextchangedlistener参数,【Android】关于addTextChangedListener()方法的上机记录...
- 通过phantomjs 进行页面截图
- 网上讨论“电商平台打败了实体店”?
- 日月如梭,玩转JavaScript日期
- scala面试题简要总结
- C# 处理应用程序减少内存占用
- 英读廊——如果运动引起摩擦,摩擦生热,为什么风吹得越快却越冷
- 重装系统要花钱?教你免费一键重装win10系统
- 免费视频转文字-音频转文字软件:网易见外工作台, Speechnotes, autosub, Speech to Text, 百度语音识别
- IOS 定位 CLLocationManager
- 阿里的Maven仓库地址
- 到底买苹果XS还是XR_苹果xs和苹果xr内部相爱相杀:队友之间该如何选择?
- GeoHash算法详解