剑指Offer-二进制中1的个数Java

…衆ロ難τιáo~ 提交于 2020-03-10 13:52:02

11、二进制中1的个数

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

思路:
使用库函数转换成字符数组,遍历计数。

public class Solution {
    public int NumberOf1(int n) {
        int count=0;
        char[] ch = Integer.toBinaryString(n).toCharArray();
        for(int i=0;i<ch.length;i++){
            if(ch[i]=='1'){
                count++;
            }
        }
        return count;
    }
}

简洁思路
对于一个非零的数二进制表示中至少会有一个1,对n和n-1按位与是因为,假设n的二进制为110110,那么n-1的二进制为110101,按位与的结果为110100,把最右侧的1消除掉了。

public class Solution {
    public int NumberOf1(int n) {
        int count=0;
        while(n!=0){
            count++;
            n = n & (n-1);
        }
        return count;
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!