您的位置:首页 > 其它

找二进制表示中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 
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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: