题意:
解题思路:
思路:1. 取巧的计算方式将数转化成二进制的数, 统计每个位上1出现的个数;2. 个数模3就可得到出现一次的数在当前位上的情况。1 1 1 1  => 151 1 0 1  => 131 1 1 1  => 151 1 1 1  => 15------------------4 4 3 4   /  3   将每一位数除3 取余 得出只有一位数的对应位的二进制数 ------------------1 1 0 1   => 13
PHP代码实现:
class Solution {    /**     * @param Integer[] $nums     * @return Integer     */    function singleNumber($nums) {        $ans = 0;        //考虑每一位        for ($i = 0; $i < 64; $i++) {            $count = 0;            //考虑每一个数            for ($j = 0; $j < count($nums); $j++) {                //当前位是否是 1                if (($nums[$j] >> $i & 1) == 1) {                    $count++;                }            }            //1 的个数是否是 3 的倍数            if ($count % 3 != 0) {                $ans = $ans | 1 << $i;            }        }        return $ans;    }        function singleNumber1($nums) {        $map = [];        for ($i = 0; $i < count($nums); $i++) {            $map[$nums[$i]]++;        }        foreach ($map as $k => $v) {            if ($v == 1) return $k;        }        return 0;    }}
GO代码实现:
func singleNumber(nums []int) int {    ans := 0    for i:= 0; i < 64; i++ {        number := 0        for _, v := range nums {            number +=  v >> i & 1        }        ans |= (number % 3) << i     }    return ans}func singleNumber(nums []int) int {    var ans int32    var i uint    for ; i < 32; i++ {       //逐位考虑        var cnt uint        for k := 0; k < len(nums); k++ {            //统计这一位出现1的次数            cnt += (uint(nums[k]) >> i) & 1          }        if cnt % 3 != 0 {  //这一位的1出现非3次            ans = ans | (1 << i) //把这一位记到结果的相应位        }    }    return int(ans)  // 返回32位完整的结果}