代码:
public class Solution {
public int reverseBits(int n) {
int rev=0;
for(int i=0;i<32;i++){
rev<<=1;
rev+=(n&1);
n>>=1;
}
return rev;
}
}
思路:
位与运算,每个数&1可以得出该数的末位数字是否为1,<<左移运算,>>有符号右移运算,正数补0负数补1.
问题描述:
代码:
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for (int num : nums) {
single ^= num;
}
return single;
}
}
思路:
任何数和 0 做异或运算,结果仍然是原来的数,即 a⊕0=a。
任何数和其自身做异或运算,结果是 0,即 a⊕a=0。
异或运算满足交换律和结合律,即a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。