题目要求:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。
示例1:
输入:n=11(控制台输入00000000000000000000000000001011)
输出:3
-------------------------------------------------------
思路:将数字转为二进制,然后求里面有多少个1
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int num = 0;
String s = Integer.toBinaryString(n);
for(int i = 0;i < s.length();i++){
if(s.charAt(i) == '1'){
num++;
}
}
return num;
}
}
数组长度:s.length()
-------------------------------------------------------
别人思路:某个神奇方法
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
return Integer.bitCount(n);
}
}
java.lang包的Integer类的bitCount()方法以整数值的二进制补码表示形式返回one-bits的数量计数。
官方答案之一:
class Solution {
public:
int hammingWeight(uint32_t n) {
int ret = 0;
for (int i = 0; i < 32; i++) {
if (n & (1 << i)) {
ret++;
}
}
return ret;
}
};
思路及解法
我们可以直接循环检查给定整数 n的二进制位的每一位是否为 1。
具体代码中,当检查第 i 位时,我们可以让 n 与 2^i 进行与运算,当且仅当 n 的第 i 位为 111 时,运算结果不为 0。