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

2019-05-31 16:09:45 浏览数 (1)

题目

描述

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

样例

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

解答

思路1

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

代码1

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

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

0 人点赞