1. 题目描述
在一个数组 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 题解
1、参考答案1
思路:数组元素的每一位中出现1的次数是3的倍数时,说明要寻找的res此位为0,若不是3的倍数,则说明res此位为1。题目中说明数字是32位的,因此计算32位的每一位为1的个数。
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
let res = 0;
//计算32位的每一位
for(let i = 0; i < 32; i++){
let count = 0;
let bit = 1 << i; //2的i次方
//统计数组元素在第i位的1的个数
for(let j = 0; j < nums.length; j++){
if((nums[j] & bit) != 0){
count++;
}
}
//判断1的个数是否是3的倍数,并生成res的这一位
if(count % 3 != 0){
res = res | bit;
}
}
return res;
};
2、参考答案2
用 有限状态机,待看。