基础知识点:
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
力扣练习题:
136.只出现一次的数字
class Solution {
public:int singleNumber(vector<int>& nums) {int result=0;for(int i=0;i<nums.size();i++){result^=nums[i];}return result;}
};
191.位1的个数
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);)
231.2的幂
class Solution {
public:bool isPowerOfTwo(int n) {return (n>0) && (n & (n-1))==0 ;}
};
342.4的幂
class Solution {
public:bool isPowerOfFour(int n) {if(n>0 && (n&(n-1))==0 && n%3==1){return true;}else return false;}
};
476.数字的补数()
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;}
};