剑指 Offer 15. 二进制中1的个数
难度:简单
题目描述
解题思路
1、常规解法
很基础的考察位运算的题目
从最右边的数字开始,每次和1做与运算,如果那个数字是1那就得到1,计数+1
每判断完一位,就右移一位,因为给的是无符号整数,所以可以用无符号右移,在Java里是>>>
/*
* 剑指 Offer 15. 二进制中1的个数
* 2020/7/28
*/
public int hammingWeight(int n) {
int count = 0;
while(n != 0) {
count += n&1;
//无符号右移
n >>>= 1;
}
return count;
}
2、偷懒解法
直接用api
public int hammingWeight(int n) {
return Integer.bitCount(n);
}
3、能给面试官带来惊喜的解答
//(n-1)&n是把 n最右边的1变成0,能变多少次就说明有多少个1
public int hammingWeight1(int n) {
int count = 0;
while(n != 0) {
count++;
n = (n-1)&n;
}
return count;
}