思路:这种题应该首先想到使用位运算,位运算的运算速度相当快。我的思路是使用一个1不断地左移,不断地与目标数或运算。如果结果数不变,说明这一位原本为1,计数count++,如果结果数变了,说明这一位原本为0。执行32次,就可以把int类型数全部算完。
一个更好地思路:把n减1 与原来的数并运算。看结果是不是为0;如果不为0 说明前面还有1,计数count++。一直执行while循环 计算后值为0停止循环。count为所需要的数。
2的幂也可以使用这个方法算,把n减1 与原来的数并运算 结果为0 则数中只有一个1。为2的某个幂。
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++ ){
if(((1<<i)|n) ==n ){
// 相等 说明这一位为1
count++;
}
//不相等 这一位为0
}
return count;
}
}