TypechoJoeTheme

Toasobi的博客

二进制中1的个数(简单)

本文最后更新于2023年03月07日,已超过562天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!


本题我的解题思路是使用或运算,一个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>
朗读
赞(0)
评论 (0)