我感觉这种题十分经典!
贴一个别人的思路解析:
To solve this problem using only constant space, you have to rethink how the numbers are being represented in computers -- using bits.
If you sum the ith bit of all numbers and mod 3, it must be either 0 or 1 due to the constraint of this problem where each number must appear either three times or once. This will be the ith bit of that "single number".
A straightforward implementation is to use an array of size 32 to keep track of the total count of ith bit.
因此就有了下面的代码:class Solution {
public:
int singleNumber(int A[], int n) {
int bits[32] = {0};
for (int i = 0; i < n; ++i) {
for (int j = 0; j < 32; ++j) {
bits[j] += (A[i] >> j) & 1;
}
}
int res = 0;
for (int j = 0; j < 32; ++j) {
res |= (bits[j] % 3) << j;
}
return res;
}
};
http://oj.leetcode.com/problems/single-number-ii/