找二进制表示中1的数量的方法
2017-05-24 14:59
218 查看
题目来源:
点击打开链接
题目描述:
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming
weight).
For example, the 32-bit integer ’11' has binary representation
so the function should return 3.
我的解决方案:
很简单也很好想的暴力算法,把1挨个移位,然后相与
别人的算法:
Offline
源作者
makuiyu
"n &= n - 1" is used to delete the right "1" of n. For example:
if n = 5 (101), then n-1 = 100, so n & (n-1) = 100, the right "1" is deleted;
if n = 6,(110), then n-1 = 101, so n & (n-1) = 100, the right "1" is also deleted;
and so on...
So time complexity is O(m), and m is the count of 1's, also m is less than or equal to 32.
点击打开链接
题目描述:
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming
weight).
For example, the 32-bit integer ’11' has binary representation
00000000000000000000000000001011,
so the function should return 3.
我的解决方案:
class Solution { public: int hammingWeight(uint32_t n) { uint32_t tmp=1; int ret=0; while(tmp) { if(tmp&n) ret++; tmp=tmp<<1; } return ret; } };
很简单也很好想的暴力算法,把1挨个移位,然后相与
别人的算法:
int hammingWeight(uint32_t n) { int res = 0; while(n) { n &= n - 1; ++ res; } return res; }
Offline
源作者
makuiyu
"n &= n - 1" is used to delete the right "1" of n. For example:
if n = 5 (101), then n-1 = 100, so n & (n-1) = 100, the right "1" is deleted;
if n = 6,(110), then n-1 = 101, so n & (n-1) = 100, the right "1" is also deleted;
and so on...
So time complexity is O(m), and m is the count of 1's, also m is less than or equal to 32.
相关文章推荐
- 一种快速找到一个数中二进制表示1的数量的方法
- 基础知识--负数的二进制表示方法
- 负数的二进制表示方法
- 负数的二进制表示方法
- 给定数量的币值,如25分,10分,5分,1分,编写计算n分的有多少种表示方法
- 负数的二进制表示方法
- 负数的二进制表示方法
- 求整数 在二进制表示中有多少个1的方法
- 二进制的几种编码表示方法
- C++中二进制、八进制、十六进制表示方法
- 负数的二进制表示方法
- C/C++二进制,八进制, 十进制和十六进制的表示方法
- C++中二进制、八进制、十六进制表示方法
- 编写一个递归方法,返回数N的二进制表示中1的个数
- 求一个数二进制表示法中1的个数诸多方法 .
- 负数的二进制表示方法
- 正整数的 二进制表示 中 从低位向高位 第1个0/1出现位置 的计算方法
- 投票协议:二进制表示方法
- 求一个数二进制表示法中1的个数诸多方法
- 负数的二进制表示方法