把每一位分别加起来,超过十也存起来,然后取3的余数,多余的部分就是单独那个的。
未操作:
取某一位
(x >>i)&1
先把这个数x往右移i位,然后想要取的那一位就位于个位数上,和1去且意思是和0000...0001取且,所以只保留了最后一位
1 public int singleNumber(int[] nums) { 2 if(nums.length == 0) { 3 return 0; 4 } 5 int[] digits = new int[32]; 6 for(int i = 0; i < 32; i++) { 7 for(int j = 0; j < nums.length; j++) { 8 digits[i] += (nums[j] >> i) & 1; 9 } 10 } 11 int res = 0; 12 for(int i = 0; i < 32; i++) { 13 res += (digits[i] % 3) << i; 14 } 15 return res; 16 }
时间: 2024-12-17 18:21:31