我试图理解为什么下面的代码不能解决这个问题。
我们正在传递位(0和1)作为参数。如果我不使用位操作,而是首先将整数转换为charArray,然后迭代它来计算'1‘的no,然后返回它,为什么它不起作用?
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count=0;
for(char c:String.valueOf(n).toCharArray())
{
if('1'==c)
++count;
}
return count;
}
}发布于 2020-09-05 11:57:11
您正在以十进制字符串计算1,您可以很容易地通过Integer.toBinaryString()将其转换为二进制字符串
public int hammingWeight(int n) {
int count=0;
for(char c:Integer.toBinaryString(n).toCharArray())
{
if('1'==c)
++count;
}
return count;
}发布于 2020-10-07 21:39:40
考虑到这是Java,我很惊讶没有人提到java.lang.Integer的JDK方法Integer.bitCount(i)。
发布于 2020-09-05 11:58:51
我们不需要将n转换成字符串,这样就可以很好地通过:
class Solution {
public static int hammingWeight(int n) {
int ones = 0;
while (n != 0) {
ones = ones + (n & 1);
n = n>>>1;
}
return ones;
}
}https://stackoverflow.com/questions/63750276
复制相似问题