Java LeetCode:计数1位的数目
我试图理解为什么下面的代码不能解决这个问题 我们正在传递位(0和1)作为参数。如果我不使用位运算,而是首先将整数转换为charArray并对其进行迭代以计算“1”的编号,然后返回它,为什么它不起作用Java LeetCode:计数1位的数目,java,bit-manipulation,bit,Java,Bit Manipulation,Bit,我试图理解为什么下面的代码不能解决这个问题 我们正在传递位(0和1)作为参数。如果我不使用位运算,而是首先将整数转换为charArray并对其进行迭代以计算“1”的编号,然后返回它,为什么它不起作用 public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int count=0;
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;
}
}
如果要在十进制字符串中计算
1
,则可以通过Integer.toBinaryString()将其转换为二进制字符串
我们不必将n转换为字符串,这将很好地传递:
class Solution {
public static int hammingWeight(int n) {
int ones = 0;
while (n != 0) {
ones = ones + (n & 1);
n = n>>>1;
}
return ones;
}
}
考虑到这是Java,我很惊讶没有人提到Java.lang.Integer的JDK方法Integer.bitCount(I)
问题说“如果我不使用位操作”,所以用位操作的解决方案回答是没有用的。“为什么它不工作?”——例如:输入是42
,它是二进制的101010
,因此它有三个1位,但是字符串。valueOf(n)
返回“42”
,其中零个字符等于'1'
。最简单的解决方案是调用:“返回一位的数字”
class Solution {
public static int hammingWeight(int n) {
int ones = 0;
while (n != 0) {
ones = ones + (n & 1);
n = n>>>1;
}
return ones;
}
}