面試題:交換兩個變量的值,不使用第三個變量

阿里巴巴面試考過這題,mark一下

方法一:算術運算

int a,b;
a=10;b=12;
a=b-a; //a=2;b=12
b=b-a; //a=2;b=10
a=b+a; //a=10;b=10

缺點::是隻能用於數字類型,字符串之類的就不可以了。a+b有可能溢出(超出int的範圍),溢出是相對的, +了溢出了,-回來不就好了,所以溢出不溢出沒關係,就是不安全。

方法二:位運算

int a=10,b=12; //a=1010^b=1100;
a=a^b; //a=0110^b=1100;
b=a^b; //a=0110^b=1010;
a=a^b; //a=1100=12;b=1010;

利用異或運算兩次值不變的性質!

方法三:棧運算

我覺得不好……

int exchange(int x,int y) 
{ 
 stack S; 
 push(S,x); 
 push(S,y); 
 x=pop(S); 
 y=pop(S); 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章