この質問は前の質問のバリエーションであり、ビット演算でもありますが、XORであろうとXORであろうと、問題を解決することはできません。解決策を考えて答えを読むことはできません。
答えは、他の数字は3回出現するので、すべての数字の各桁の対応する値を合計すると、3で割り切れる値は、1回だけ出現する数字の値がこれであることを意味します1つ0、それ以外の場合は1。
しかし、より簡潔な答えは、leetcode、有限状態オートマトン(https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii- lcof / solution / mian-shi-ti-56-ii-shu-zu-zhong-shu-zi-chu-xian-d-4 /)
私のコード、コードを書くのは難しくありません
public int singleNumber(int[] nums) {
int[] bit_value = new int[32];
for(int count = 0;count<32;count++){
bit_value[count] = 0;
}
for(int count = 0;count<nums.length;count++){
int residual = nums[count];
for(int count_bit = 0;count_bit<32;count_bit++){
int value = residual%2;
residual = residual/2;
bit_value[count_bit] += value;
if(residual == 0){
break;
}
}
}
int res = 0;
int value = 1;
for(int count_bit = 0;count_bit<32;count_bit++){
if(bit_value[count_bit]%3 != 0){
res += value;
}
value *= 2;
}
return res;
}
回答コード
public int singleNumber(int[] nums) {
int ones = 0, twos = 0;
for(int num : nums){
ones = ones ^ num & ~twos;
twos = twos ^ num & ~ones;
}
return ones;
}
作者:jyd
链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/solution/mian-shi-ti-56-ii-shu-zu-zhong-shu-zi-chu-xian-d-4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。