LintCode-365.二进制中有多少个1

题目

描述

计算在一个 32 位的整数的二进制表式中有多少个 1.

样例

给定 32 (100000),返回 1
给定 5 (101),返回 2
给定 1023 (111111111),返回 9

解答

思路1

这个题目用java的内建函数很简单,但是它作为OJ题这肯定不是本意。

代码1

public class Solution {
    /**
     * @param num: an integer
     * @return: an integer, the number of ones in num
     */
    public int countOnes(int num) {
        // write your code here
        int sum = 0;
        char[] cs = Integer.toBinaryString(num).toCharArray();
        for(int i = 0; i < cs.length; i++){
            if(cs[i] == '1'){
                sum++;
            }
        }
        return sum;
    }
};

思路2

依次向右位运算。奇数尾数为1,偶数尾数为2.
注意考虑负数的情况需要处理首位的1(0x80000000 ^ num)。

代码2

public class Solution {
    /**
     * @param num: an integer
     * @return: an integer, the number of ones in num
     */
    public int countOnes(int num) {
        // write your code here
        int sum = 0;
        if(num < 0){
            num = num ^ 0x80000000;
            sum++;
        }
        while(num > 0){
            if(num % 2 == 1){
                sum++;
            }
            num = num>>1;
        }
        return sum;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容