【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)
191. Number of 1 Bits
Write a function that takes an unsigned integer and
returns the number of '1' bits
it has (also known as the
Hamming weight
).
Example 1:
Input:
11
Output:
3
Explanation:
Integer 11 has binary representation
00000000000000000000000000001011
Example 2:
Input:
128
Output:
1
Explanation:
Integer 128 has binary representation
00000000000000000000000010000000
//解法一:利用减一再做与运算可以使最右边的1变为0,统计1的个数
class
Solution
{
public
:
int
hammingWeight
(
uint32_t
n
)
{
int
count
=
0
;
while
(
n
) //有几个1就运算几次,比方法二效率高
{
count
++;
n
=
(
n
-
1
)
&
n
;
//通过减一再做与运算可以使最右边的1变为0,不断重复可以统计1的个数
}
//最后n变为0
return
count
;
}
};
//解法二:依次和1、10、100...10000000(31个0)做与运算
class
Solution
{
public
:
int
hammingWeight
(
uint32_t
n
)
{
int
count
=
0
;
unsigned
int
mask
=
1
;
//32位无符号数
while
(
mask
)
{
if
(
n
&
mask
)
count
++;
mask
=
mask
<<
1
;
//左移一位
}
return
count
;
}
};