image.png

思路

1.位运算求解此题;
2.如果把所有出现三次的数字的二进制表示的每一位加起来,那么每一位都能被3整除;
3.如果某一位的和能被3整除,那么只出现一次数字的二进制位中对应的那一位就是0,否则就是1;
4.完结。

代码

  1. public int singleNumber(int[] nums) {
  2. int[] bit = new int[32];
  3. for(int j=0;j<32;j++){
  4. for(int i=0;i<nums.length;i++){
  5. int num = nums[i]>>j;
  6. bit[j] += num&1;
  7. }
  8. }
  9. int result = 0;
  10. for(int i=31;i>=0;i--){
  11. result<<=1;
  12. result+=bit[i]%3;
  13. }
  14. return result;
  15. }