1.二进制中1的个数
方法一:逐位判断
根据按位与运算,若n&1=0,则n的二进制最右一位为0;
若n&1=1,则n的二进制最右一位为1。
class Solution {
public:
int hammingWeight(uint32_t n) {
int res=0;
while(n)
{
if(n&1) res++;
n=n>>1;
}
return res;
}
};
方法二:使用n&(n-1)
class Solution {
public:
int hammingWeight(uint32_t n) {
int res=0;
while(n)
{
res++;
n=n&(n-1);
}
return res;
}
};
2.不用加减乘除做加法
递归做法
class Solution {
public:
int add(int a, int b) {
if(b==0) return a;
return add(a^b,(unsigned int)(a&b)<<1);//力扣中不支持负值左移,要先转为无符号数
}
};