首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LeetCode:计数1位数

LeetCode:计数1位数
EN

Stack Overflow用户
提问于 2020-09-05 11:50:58
回答 3查看 130关注 0票数 0

我试图理解为什么下面的代码不能解决这个问题。

我们正在传递位(0和1)作为参数。如果我不使用位操作,而是首先将整数转换为charArray,然后迭代它来计算'1‘的no,然后返回它,为什么它不起作用?

代码语言:javascript
复制
 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;
            
        }
    }
EN

回答 3

Stack Overflow用户

发布于 2020-09-05 11:57:11

您正在以十进制字符串计算1,您可以很容易地通过Integer.toBinaryString()将其转换为二进制字符串

代码语言:javascript
复制
public int hammingWeight(int n) {
    int count=0;
    for(char c:Integer.toBinaryString(n).toCharArray())
    {
        if('1'==c)
            ++count;
    }

    return count;

}
票数 1
EN

Stack Overflow用户

发布于 2020-10-07 21:39:40

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

票数 0
EN

Stack Overflow用户

发布于 2020-09-05 11:58:51

我们不需要将n转换成字符串,这样就可以很好地通过:

代码语言:javascript
复制
class Solution {
    public static int hammingWeight(int n) {
        int ones = 0;
        while (n != 0) {
            ones = ones + (n & 1);
            n = n>>>1;
        }
        return ones;
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63750276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档