一篇解析比较详细的文章:
C++
解法(1)
求出每个比特位的数目,然后%3,如果这个比特位只出现1次,那么这比特位就会余1,否则就会整除。
把每个余下的比特位求出来,就知道是哪个数只出现1次了。
1 class Solution { 2 public: 3 /** 4 * @param A : An integer array 5 * @return : An integer 6 */ 7 int singleNumberII(vector &A) { 8 // write your code here 9 int count[32] = { 0};10 int res = 0;11 for (int i = 0; i < 32; i++) {12 for (auto &v : A) {13 count[i] += (v >> i) & 1;14 }15 res |= ((count[i] % 3) << i);16 }17 return res;18 }19 };
解法(2)
表示看不懂。