[LeetCode][191][Number of 1 Bits]
来源:互联网 发布:幻萌网络有几个游戏 编辑:程序博客网 时间:2024/05/19 15:42
题目链接:https://leetcode.com/problems/number-of-1-bits/
题目描述:
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as theHamming weight).
For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011
, so the function should return 3.
刚做完第190题reverse bits,再做这道,就会觉得很简单了,同样是一道位操作的题。
思路是这样的,将源操作数循环右移,然后和1进行“与运算”,结果为1,计数器就加1,直到n移位后的结果为0,即可跳出循环。
代码如下:
<span style="font-size:12px;">int hammingWeight(uint32_t n) { int count = 0; while (n != 0){ //n等于0,跳出循环 if( n & 1){ //同1做与运算,结果为1,则最右位为1,计数器加1 count++; } n >>= 1; } return count;}</span>
这么简单就结束了?感觉很诡异的样子,这道题其实在Brian W. Kernighan和Dennis M. Ritchie写的C程序设计语言中是道例题,并在例题中给出了 x &= (x-1)的提示,即:
在求对二的补码时,表达式 x &= (x-1)可以删除x中最右边值为1的一个二进制位。
原理是,x-1使得x最右边值为1的位变为0;再与x本身相与后,x最右边值为1的位变为0,此为之前的位(左边的位)的值不变。
所以可以用 x &= (x-1)加快执行速度,代码如下:
<span style="font-size:12px;">int hammingWeight(uint32_t n) { int count = 0; if(n > 0){ //这里要考虑边界值0,因为0-1之后就为负数了,不同的编译器会有问题,所以要从1开始。 count++; //这里要先对count进行一次加1操作,因为while循环在最后一个值为1的位时就不进入循环体了,相当于少算了一次,在这里补上。 while (n &= (n-1)){ count++; } } return count;}</span>
0 0
- leetcode:bits:Number of 1 Bits(191)
- [Leetcode 191, Easy] Number of 1 Bits
- leetCode #191 number of 1 bits
- LeetCode 191 Number of 1 Bits
- Leetcode NO.191 Number of 1 Bits
- [LeetCode][191][Number of 1 Bits]
- [leetcode 191]Number of 1 Bits
- LeetCode(191) Number of 1 Bits
- LeetCode #191 Number of 1 Bits
- LeetCode 191: Number of 1 Bits
- LeetCode 191 Number of 1 Bits
- Leetcode #191 Number of 1 Bits
- LeetCode 191 Number of 1 Bits
- LeetCode 191: Number of 1 Bits
- leetcode[191]:Number of 1 Bits
- leetcode-191-Number of 1 Bits
- leetcode 191:Number of 1 Bits
- leetcode: (191) Number of 1 Bits
- pygtk+glade转换为windows环境下exe安装包
- openwrt的结构与编写 HelloWorld程序
- 袁羂艿薃螀羅莅莀薀袈莀蕿
- vb.net 正则表达式 取 固定格式的字符
- 芆莂虿袁芅蒄蒂螇芄芄蚇螃
- [LeetCode][191][Number of 1 Bits]
- 学习笔记:AlexNet&Imagenet学习笔记
- 节薈蒀聿芄蚄虿衿膇芇袈螈
- 肃莀薂袆膅膃蒈羅袅莈莄羅
- 袀芅莂罿羆莄蚄羂肂膀蒃袄
- 蒆蚈肂芁艿薄肁羁蒄薀肀膃
- STL系列(1):简介
- 芃葿薄羄聿艿薇聿膈薁蕿螃
- Oracle数据库教程:查看控制文件内容的方法