public class Solution {
// you need treat n as an unsigned value
//所以方法中参数类型如果是int,最大能接受是0+31个1,也就是2147483647,假如输入2147483648,转化时就会溢出,变成32个1(补码),-2
//解决办法是对传入的n进行修改,不修改方法定义本身的参数int与返回值int,而是在方法内部放一个long的temp
//注:Java编译器中允许出现的最大字面值是2147483647,若要写更大的只能用Integer.MAX_VALUE + 1,solution.reverseBits(Integer.MAX_VALUE + 1)
public int hammingWeight(int n) {
int res = 0;
long temp = Long.MAX_VALUE;
//System.out.println(n);
if(n < 0) temp = 2 * (long)Integer.MAX_VALUE + 2 + n;//修改溢出的n
//temp = 2 * Integer.MAX_VALUE +2 + n;是错误的,因为Integer.MAX_VALUE返回的是int,乘以2后又有一个溢出,所以要先转换为long
else temp = n;
int bit = 0;
//因为一个无符号数规定二进制是32位,而整型整数32位中第一位是符号位
for(int i = 0; i < 32; i++){//将十进制数转化为二进制数,然后统计二进制中1的个数
bit = (int) (temp % 2);
if(bit == 1){
res++;
}
temp = temp / 2;
}
return res;
}
}
leetcode [Number of 1 Bits]//待整理多种解法
最新推荐文章于 2023-02-25 22:41:55 发布