面試官:不借助第三變量交換兩個變量值的方案你有幾種?
引言
在我們學習編程之初,就學習過變量的賦值操作,同時也學習了將一個變量的值賦值給另外一個變量。對于交換兩個變量的值,很多童鞋都有解決方案。然鵝,對于面試官提出的不借助第三變量來交換兩個變量的值,你能想到幾種解決方案呢?
如果你只知道一種方案,請你認真看下去... 如果你知道兩種方案,那么你可以來了解更多方案了...
一、最簡單的實現(xiàn)-最初的記憶
讓我們由淺入深,來了解交換變量值的最簡單、最初的解決方案:借助于第三個變量
// 聲明變量a和b
let a = 5
let b = 4
// 1. 臨時將變量a的值賦值給變量tmp
let tmp = a
// 2. 將變量b的值賦值給a
a = b
// 3. 將變量a的值(tmp的值)賦值給b
b = tmp
console.log(a) // 4
console.log(b) // 5
so east!
二、不借助第三變量的實現(xiàn)-ES6版
面試官在聽到上面給出的解決方案后,微微一笑(腦海中閃現(xiàn)到:你以為就這么簡單)說道,有其他解決方案嗎,不借助第三變量呢?
了解學習了JS ES6的數(shù)組解構(gòu)賦值的童鞋對此冷冷一笑,嘴角一撇,冷酷酷地說道:也可以使用ES6的數(shù)組解構(gòu)賦值來交換變量的值。
let a = 5;
let b = 4; // 請注意此位置的分號;是一定要存在的呀
// 數(shù)組結(jié)構(gòu)賦值,交換變量a,b的值
[a, b] = [b, a]
console.log(a) // 4
console.log(b) // 5
看到面試官的臉色似乎漸漸露出了滿意的神色,內(nèi)心是不是有點兒竊喜。如果此刻面試官又說道,還有沒有其他的解決方案,小朋友,你是不是有許多問號?
三、不借助第三變量的實現(xiàn)-終極版本一:單純數(shù)學運算
胡哥在這里再次強調(diào),這絕對不是一個考驗“智商”的答案,只是考驗了在編程的變通能力以及經(jīng)驗問題,下面請看代碼的實現(xiàn)。
let a = 5
let b = 4
// 接下來就是見證神奇的時刻,來,鏡頭請對準我。
// 二者之和
a = a + b
// 二者之和 - b的值,剩余a的值賦值給變量b
b = a - b
// 此刻a還是二者之和,a - b此刻相當于二者之和 - 變量b(a的值),那么此刻剩余的就是變量b的值,賦值給a變量
a = a - b
// yes, we did!
console.log(a) // 4
console.log(b) // 5
如果此刻面試官再問出還有沒有其他的方案,此刻你會慌的一比呢,還是內(nèi)心大喊“wc”呢
四、不借助第三變量的實現(xiàn)-終極版本二:位運算符^
不要怕,兄弟們,接下來給大家來分享第四種方式,位運算符 ^ 異或。在變量的運算中這個操作符有什么作用呢?
異或運算符:
是執(zhí)行位運算的,二進制運算,參與變量運算的兩個變量要轉(zhuǎn)為二進制進行運算。
如果相同二進制位的值相同,則轉(zhuǎn)為0,否則轉(zhuǎn)為1.
那交換兩個變量的值具體代碼是如何實現(xiàn)的呢?請看大屏幕,哦,不,請往下看。
let a = 5 // 0101
let b = 4 // 0100
// 按位異或運算
a = a ^ b // 0101 ^ 0100 ===> 0001,此時a的值為1
b = a ^ b // 0001 ^ 0100 ===> 0101,此時b的值為5
a = a ^ b // 0001 ^ 0101 ===> 0100,此時a的值為4
console.log(a) // 4
console.log(b) // 5
驚不驚喜,意不意外。。。
以上四種實現(xiàn)交換兩個變量值得方案你都掌握了嗎,如果掌握了,可以對面試官反手就是一個“吊打”了。如果你有更多的解決交換兩個變量值的方案,歡迎留言交流呀!
后記
以上就是胡哥今天給大家分享的內(nèi)容,喜歡的小伙伴記得收藏、轉(zhuǎn)發(fā)、點擊右下角按鈕在看,推薦給更多小伙伴呦,歡迎多多留言交流...


說說 C# 9 新特性的實際運用

微信8.0大更新,附最新內(nèi)測版下載地址!
