Java異或是Java二進(jìn)制的一種運(yùn)算規(guī)則。兩個(gè)相同的操作位相同則為0,不同則為1。
特性:
1、任意兩個(gè)相同的數(shù)異或的值為0,任何數(shù)與0的異或至為原值。x ^ x = 0,0 ^ x = x。
2、多個(gè)數(shù)異或運(yùn)算時(shí),最終都將所有值的操作位做一遍是否相同的比較,所以可以得到:x^(y^z) = (x^y)^z。
示例:
1、給定兩個(gè)字符串?s?和?t,它們只包含小寫字母。字符串t由字符串s隨機(jī)重排,然后在隨機(jī)位置添加一個(gè)字母。請(qǐng)找出在?t?中被添加的字母。(來自LeetCode)
?public?char?xor(String?s,?String?t){
? ? ? ?char?a?=0;
? ? ? ? for(int?i?=?0?;?i?<?s.length()?;?i++){?
???????????a^=s.charAt(i);?
??????????}?
???????for(int?i?=?0?;?i?<?t.length()?;?i++){
????????????a^=t.charAt(i);
???????????}
????????return?a;????
}
2、給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只出現(xiàn)一次以外,其余每個(gè)元素均出現(xiàn)兩次。找出那個(gè)只出現(xiàn)了一次的元素。(來自LeetCode)
/**
所有出現(xiàn)兩次元素在異或后結(jié)果為0,0與出現(xiàn)一次的數(shù)據(jù)異或后,值不變
*/
public?int?singleNumber(int[]?nums)?{
????????int?result?=?nums[0];
????????for(int?i?=?1;?i<nums.length;?i++?){
????????????result?^=?nums[i];
????????}
????????return?result;
}