-
Notifications
You must be signed in to change notification settings - Fork 0
/
191. Number of 1 Bits
71 lines (51 loc) · 3.02 KB
/
191. Number of 1 Bits
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Write a function that takes the binary representation of an unsigned integer and returns the number of '1' bits it has (also known as the Hamming weight).
Note:
Note that in some languages, such as Java, there is no unsigned integer type. In this case, the input will be given as a signed integer type. It should not affect your implementation, as the integer's internal binary representation is the same, whether it is signed or unsigned.
In Java, the compiler represents the signed integers using 2's complement notation. Therefore, in Example 3, the input represents the signed integer. -3.
Example 1:
Input: n = 00000000000000000000000000001011
Output: 3
Explanation: The input binary string 00000000000000000000000000001011 has a total of three '1' bits.
Example 2:
Input: n = 00000000000000000000000010000000
Output: 1
Explanation: The input binary string 00000000000000000000000010000000 has a total of one '1' bit.
Example 3:
Input: n = 11111111111111111111111111111101
Output: 31
Explanation: The input binary string 11111111111111111111111111111101 has a total of thirty one '1' bits.
Constraints:
The input must be a binary string of length 32.
这道题的题目描述是:编写一个函数,该函数接收一个无符号整数的二进制表示,并返回其中“1”位的数量(也称为汉明重量)。
说明:
请注意,在某些语言(如Java)中,没有无符号整数类型。在这种情况下,输入将作为有符号整数类型给出。它不应影响您的实现,因为整数的内部二进制表示无论是有符号还是无符号都是相同的。
在Java中,编译器使用2的补数符号表示有符号整数。因此,在示例3中,输入表示有符号整数-3。
输入:n = 00000000000000000000000000001011
输出:3
解释:输入二进制字符串00000000000000000000000000001011共有三个“1”位。
输入:n = 00000000000000000000000010000000
输出:1
解释:输入二进制字符串00000000000000000000000010000000共有一个“1”位。
输入:n = 11111111111111111111111111111101
输出:31
解释:输入二进制字符串11111111111111111111111111111101共有31个“1”位。
限制:
输入必须是长度为32的二进制字符串。
class Solution {
public int hammingWeight(int n) {
int count = 0; // 用于计数的变量,初始值为0
for (int i = 0; i < 32; i++) { // 循环32次,每次判断n的第i位是否为1
count += n & 1; // 如果n的第i位为1,将count加1
n >>>= 1; // 将n右移一位
}
return count; // 返回count的值
}
}
注释:
定义了一个类 Solution,里面包含了一个方法 hammingWeight。
hammingWeight 方法接收一个 int 类型的参数 n。
定义了一个变量 count,用于计数,初始值为 0。
使用 for 循环,循环 32 次,每次判断 n 的第 i 位是否为 1。
如果 n 的第 i 位为 1,将 count 加 1。
将 n 右移一位,相当于将 n 的二进制表示中的第 i 位删去,只考虑前 i-1 位。
返回 count 的值。