每天两道编程题---剑指offer(11):二进制中1的个数

题目描述:

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解题思路:

原本想的方法是采用十进制转二进制的算术方法,对照测试用例后发现需要转换为32位二进制数。于是设立了一个测试位flag,一个计数位count,与n按位与运算,若结果不为0,则count++。每次与运算后flag左移一位,与下一位进行运算。

附上代码:

import java.util.*;
public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        int flag = 1;
        while (flag != 0) {
            if ((n & flag) != 0) {
                count++;
            }
            flag = flag << 1;
        }
        return count;
    }
}

性能结果:

运行时间:12ms,占用内存9296K

优秀解法:

以下解法是公认的最优解,直接上代码:

链接:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8
来源:牛客网

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        while(n!= 0){
            count++;
            n = n & (n - 1);
         }
        return count;
    }
}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/czj970203/article/details/79978348
文章标签: code exercise java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

每天两道编程题---剑指offer(11):二进制中1的个数

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭