在云南出差的时候我开始刷LeetCode上的
算法题了,一共一百八十多道题,不知道
我得做到什么时候。好了闲话不多说,先
来对我做出的第一道题写个报告:
题目链接:
点击打开链接number-of-1-bits。
题目描述:
Write a function that takes an unsigned integer
and return the number of '1' bits it has (also known
as the Hamming weight).For example ,the 32-bit
integer '11' has binary representation
00000000 00000000 00000000 00001011,
so the function should return 3.
题目解释:
将一个无符号整型(十进制)用二进制表示的时候,
每一个位上要么是0要么是1,现在就要计数有多少
位是1.这就是该函数的功能。
解题方案:
看到题目的描述以后,我们可以很直观的想到将一个
整数转换为二进制的,然后计数里面‘1’的个数就行了。
(注:此图片摘自百度百科
采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;
再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余
数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
)
上面的描述就是十进制转二进制的具体方法,我们在
计算过程中只要加一行计数余数为‘1’的个数的代码就
可以了。
下面就是我的源码:
int hammingWeight(uint32_t n) {
int count = 0;//用来计数余数‘1’的个数
//进制转换
while(n)
{
if(n % 2)
{
count++;
}
n /= 2;
}
return count;
}