题解 | #二进制中1的个数#
二进制中1的个数
http://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8
import java.util.*;
public class Solution {
public int NumberOf1(int n) {
// 一些特殊情况的处理
if (0 == n) {
return 0;
}
// 首先,判断 n 是正整数还是负整数
int rs = 0; // 定义一个整型变量,用于存放最终的返回结果
int abs = Math.abs(n); // 取 n 的绝对值
if (n > 0) { // 如果 n 为正整数
while (abs != 0) {
if (abs % 2 == 1) {
rs++;
}
abs /= 2;
}
} else { // 如果 n 为负整数
StringBuffer sb = new StringBuffer("");
while (abs != 0) {
sb.append(abs % 2 == 0 ? 1 : 0);
abs /= 2;
}
int len = sb.length(); // 获取 StringBuffer 的长度
for (int i = 0; i < 32 - len; i++) {
sb.append(1);
}
sb.reverse();
String tmpStr = "00000000000000000000000000000001";
int carryBit = 0;
for (int i = sb.length() - 1; i > -1; i--) {
int tmpValue = Integer.valueOf(sb.charAt(i) + "") + Integer.valueOf(tmpStr.charAt(i) + "") + carryBit;
rs += (tmpValue % 2 == 1 ? 1 : 0);
carryBit = tmpValue / 2;
}
if (carryBit != 0) {
rs++;
}
}
return rs;
}
}