题目
描述
计算在一个 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;
}
};