【题目描述】
Given3*n + 1numbers, every numbers occurs triple times except one, find it.
给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。
【题目链接】
www.lintcode.com/en/problem/single-number-ii/
【题目解析】
这题给出的元素数目为3*n + 1,因此我们很自然地想到如果有种运算能满足「三三运算」为0该有多好!对于三个相同的数来说,其相加的和必然是3的倍数,仅仅使用这一个特性还不足以将单数找出来,我们再来挖掘隐含的信息。以3为例,若使用不进位加法,三个3相加的结果为:0011+0011+0011=0033.
注意到其中的奥义了么?三个相同的数相加,不仅其和能被3整除,其二进制位上的每一位也能被3整除。因此我们只需要一个和int类型相同大小的数组记录每一位累加的结果即可。
【参考答案】