概述
时间限制:1秒
空间限制:32768K
热度指数:223769
算法知识视频讲解
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
1 说来惭愧,这个题之前在leetcode刚刷不久,这次又是有点不理解,理解之后非常简单的一题,所以刷题的过程,我们一定要认真理解这个题目,到底考的是什么,只有真正理解了,我们才能理解它。
这个题考察的是二进制的1的个数,我们知道,一个十进制的数可以转换成二进制,比如7的二进制为111,6的二进制为110,我们做这个题,第一次不会做没事,知道这个题的解法,理解了就好了,首先明白n&(n-1),这个核心思想是什么意思,这一步就是将n 的二进制最后一个1变成0,111&110=110,所以,我们用一个while循环判断,直到n等于0,结束循环,具体代码如下:
public class Solution {
public int NumberOf1(int n) {
int count =0;
while(n!=0){
count++;
n=n&(n-1);
}
return count;
}
}
没进行一次n&(n-1),n里面的一就会少一个。这样利用count就可以统计里面1的个数了。
2
我们利用n&(n-1),也可以判断一个数是否是2的幂,因为如果一个数是2的幂,则,这个数n&(n-1)=0,因为在2的幂这里,二进制总会进位,所以用n&(n-1)==0是很好来判断是否是2的幂。
最后
以上就是愤怒香水为你收集整理的剑指offer(11)二进制中1的个数的全部内容,希望文章能够帮你解决剑指offer(11)二进制中1的个数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复