剑指offer--- 二进制中一的个数

来源:互联网 发布:淘宝店怎么增加销量 编辑:程序博客网 时间:2024/06/06 02:24

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。


解题思路:

该问题如果使用的是,第一反应中想到的向右移,然后判断target是否为0的方法,会因为负数造成oom。

因此,使用n & (n - 1) 的方式;将一个数减去1,再与原来的数做与运算会将原来的数的最后一位变成0,因此,有多少个1就可以进行多少次这样的运算。


java

public class Solution {    public int NumberOf1(int n) {int count = 0;        while (n != 0) {            count++;            n = n & (n - 1);        }        return count;    }}


相关的题目:

(1)判断一个数是否为2的整数次方;

(2)判断m,n两个数需要经过多少次运算才能变为同样的数;


原创粉丝点击