Toasobi
二进制中1的个数(简单)
本文最后更新于2023年03月07日,已超过672天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
本题我的解题思路是使用或运算,一个for循环对2求i次幂(0次幂二进制1在第1位,1次幂则在第2位)然后和待求数进行或运算。因为2的i次幂除了第i+1位为1,其他都为0,做或运算时如果待求数该位也为1则不会改变待求数,这即是本题思路。
注意!因为int是有符号数据类型,数据范围是-2,147,483,648到2,147,483,647。所以2的31次方在编译器中是2147483647而不是2147483648。因此需要特殊处理。
代码如下:
<div>
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count = 0;
for(int i =0;i<32;i++){
int temp;
temp = (int)Math.pow(2,i);
if(i == 31)
temp += 1;
if((n | temp) == n){
count ++;
}
}
return count;
}
}
</div>
=====================
- 方法二:与运算
=====================
这个其实和我上面的思想是差不多的,就是把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。
代码如下:
<div>
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count=0;
while(n!=0){
count++;
n=n&(n-1);
}
return count;
}
}
</div>