基础知识点:
1.判断2的幂 n&(n-1)==0
2.每次减一处理 n&(n-1)
3.判断出现1次次数的数 x^0==x,x^x==0,a^b=c则a=b^c,b=a^c
力扣练习题:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int result=0;
for(int i=0;i<nums.size();i++)
{
result^=nums[i];
}
return result;
}
};
class Solution {
public:
int hammingWeight(uint32_t n) {
int ret = 0;
for (int i = 0; i < 32; i++) {
if (n & (1 << i)) {
ret++;
}
}
return ret;
}
};
或者直接调用函数(return __builtin_popcount(n);)
class Solution {
public:
bool isPowerOfTwo(int n) {
return (n>0) && (n & (n-1))==0 ;
}
};
class Solution {
public:
bool isPowerOfFour(int n) {
if(n>0 && (n&(n-1))==0 && n%3==1)
{
return true;
}
else return false;
}
};
class Solution {
public:
int findComplement(int num) {
//a^b=c a=b^c 已知a和b位相反 所以先求出c=111…………
int num1=1;
while(num1<num)
{
num1<<=1,num1++;
}//找到比num大全为1的数
return num1^num;
}
};