題目:
在一個數組 nums 中除一個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。
示例 1:
輸入:nums = [3,4,3,3]
輸出:4
示例 2:
輸入:nums = [9,1,7,9,7,9,7]
輸出:1
限制:
1 <= nums.length <= 10000
1 <= nums[i] < 2^31
題解:
這道題的關鍵就在於只有一個數字只出現了一次,其他都出現了三次,那麼按位來講,相同位全部加起來,那個特殊的數在位上爲1時,結果是3n+1,爲0的話則是3n。
這裏用到一個小技巧,!!(x)後得到的就是x的摩爾值。
class Solution {
public:
int singleNumber(vector<int>& nums) {
long site = 1;
int ans = 0;
for(int i = 0;i<32;i++)
{
int t = 0;
for(int num : nums)
{
t += !!(num&site);
}
ans += (t%3)<<i;
site<<=1;
}
return ans;
}
};