問題:
在不使用中間變量的前提下姑蓝,請(qǐng)問如何交換兩個(gè)變量的值膝蜈?
解答:
這屬于經(jīng)典的入門級(jí)面試題,其實(shí)答案有多種熔掺。
第一類方法也是常用的方法饱搏,使用最簡(jiǎn)單的加減法。
<blockquote>
public void swap(int a,int b){
a=a+b;
b=a-b;
a=a-b;
}
</blockquote>第二類方法和第一種類似置逻,但使用的是乘除法推沸,其實(shí)乘除法只是加減法的變種。
<blockquote>
public void swap(int a,int b){
a = a * b;
b = a / b;
a = a / b;
}
</blockquote>第三類方法使用異或?qū)崿F(xiàn)交換券坞,異或的原理就是如果2個(gè)數(shù)中對(duì)應(yīng)的位上相同為0鬓催,相異為1,即任何數(shù)異或上其本身為0, 而任何數(shù)和 0 異或還是任何數(shù)恨锚。
<blockquote>
public void swap(int a,int b){
a ^= b; //a=a^b
b ^= a; //b=b(ab)=bab=bba=0^a=a
a ^= b; //a=(ab)a=aba=aab=0^b=b
}
</blockquote>
推薦閱讀