Leecode 位运算

231. 2的幂

三种位运算方法
因为2次幂均为 1000000形式,n-1即为0111111111形式
负数为源码补码加一 1000000000 对应负数

return n>0 && (n&n-1)==0;
return n>0 && (n&-n)==n;
return n>0 && (1<<30)%n==0;
判断质数
## 常规算法
bool isprimer(int n){
    for(int i = 2; i

762. 二进制表示中质数个计算置位

for (int k = i;k; k >>= 1) nn += k & 1;   # 判断二进制个数
int countPrimeSetBits(int L, int R) {
        unordered_set pp({2,3,5,7,11,13,17,19,23,29});
        int res = 0;
        for (int i = L; i <= R; i++) {
            int nn = 0;
            for (int k = i;k; k >>= 1) nn += k & 1;
            //cout << nn << endl;
            if (pp.count(nn)) res++;
            //cout << res << endl;
        }
        return res;

136. 只出现一次的数字

输入: [4,1,2,1,2]
输出: 4

#运用异或解决
for(auto x:nums) return res^=x;
#消消乐

476. 数字的补数

输入: 5
输出: 2
解释: 5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。

#运用位运算
int res=0,t=0;
while(num){
    res+= !(num&1)<>1;
}
return res;

137. 只出现一次的数字 II

统计32位 1的个数,模3余一保留即为单独数字

你可能感兴趣的:(Leecode 位运算)