leetcode:count 1位的数目

2q5ifsrm  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(353)

我试图理解为什么下面的代码不能解决这个问题。
我们正在传递位(0和1)作为参数。如果我不使用位运算,而是首先将整数转换为chararray,然后对其进行迭代以计算“1”的编号,然后返回它,为什么它不起作用?

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;

        }
    }
iyr7buue

iyr7buue1#

你在数 1 在十进制字符串中,您可以通过 Integer.toBinaryString() ```
public int hammingWeight(int n) {
int count=0;
for(char c:Integer.toBinaryString(n).toCharArray())
{
if('1'==c)
++count;
}

return count;

}

nbnkbykc

nbnkbykc2#

我们不必将n转换为字符串,这将很好地传递:

class Solution {
    public static int hammingWeight(int n) {
        int ones = 0;
        while (n != 0) {
            ones = ones + (n & 1);
            n = n>>>1;
        }
        return ones;
    }
}
8ftvxx2r

8ftvxx2r3#

考虑到这是java,我很惊讶没有人提到jdk方法 Integer.bitCount(i)java.lang.Integer .

相关问题