
交換
問題:
在不使用中間變量的前提下,請問如何交換兩個變量的值?
解答:
這屬于經典的入門級面試題,其實答案有多種。
第一類方法也是常用的方法,使用最簡單的加減法。
<blockquote>
public void swap(int a,int b){
a=a+b;
b=a-b;
a=a-b;
}
</blockquote>第二類方法和第一種類似,但使用的是乘除法,其實乘除法只是加減法的變種。
<blockquote>
public void swap(int a,int b){
a = a * b;
b = a / b;
a = a / b;
}
</blockquote>第三類方法使用異或實現(xiàn)交換,異或的原理就是如果2個數(shù)中對應的位上相同為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>
推薦閱讀