原題鏈接在此 https://leetcode.cn/problems/reverse-integer/ 一個(gè)常見的算法問題是反轉(zhuǎn)正整數(shù):將 12345 變成 54321。乍一看,這個(gè)問題似乎很簡(jiǎn)單——將整數(shù)轉(zhuǎn)為字符串,然后轉(zhuǎn)為數(shù)組,反轉(zhuǎn)數(shù)組,然后將其轉(zhuǎn)為字符串,最后再次化為整數(shù)。雖然該解決方案可能會(huì)得到“54321”,但這并不是解決問題的最佳方法。 如果算法的輸入值是整數(shù),并且預(yù)期輸出是整數(shù),那么問題的最佳解決方案不涉及將整數(shù)轉(zhuǎn)換為另一種數(shù)據(jù)類型。相反,要解決簡(jiǎn)單的“反轉(zhuǎn)整數(shù)”問題,您應(yīng)該使用模和簡(jiǎn)單的數(shù)學(xué)。 首先要做的是編寫一個(gè)函數(shù),我將其稱為 現(xiàn)在,您想要對(duì)數(shù)字執(zhí)行操作,直到輸入等于零。為此,創(chuàng)建一個(gè) while 循環(huán): 在 while 循環(huán)內(nèi),您要做的第一件事是獲取數(shù)字的模。模運(yùn)算符 (%) 返回余數(shù),因此如果執(zhí)行類似 的操作 現(xiàn)在您已經(jīng)有了模數(shù),您需要修改原始數(shù)字,以便最終值不再包含在數(shù)字中。為此,您必須將數(shù)字除以 10,并對(duì)該操作執(zhí)行 Math.floor() : 最后,您需要修改“結(jié)果”變量。您想要將“mod”添加到結(jié)果中,但每次執(zhí)行 while 循環(huán)時(shí),您都需要將現(xiàn)有結(jié)果乘以 10,以便它變得更長(zhǎng),而不是簡(jiǎn)單地將數(shù)字的所有值相加:就是這樣!為了測(cè)試這個(gè)解決方案是否有效,讓我們使用真值表嘗試數(shù)字“123”: 由于 num 現(xiàn)在為 0,因此 while 循環(huán)不再執(zhí)行,函數(shù)返回結(jié)果,即 321。 如果輸入可以是正數(shù)或負(fù)數(shù),您可以通過在開始時(shí)檢查是否正確來輕松修改此函數(shù),然后根據(jù)需要在末尾添加負(fù)號(hào)。 首先,實(shí)例化一個(gè)變量并將其設(shè)置為布爾值。如果輸入數(shù)字為正數(shù),則無需更改變量。如果為負(fù)數(shù),則將該變量設(shè)置為“false”,并將輸入的數(shù)字設(shè)置為其自身的絕對(duì)值: 然后,在最終的 return 語(yǔ)句中,您需要檢查 'pos' 變量是 true 還是 false。如果為 true,則只需返回結(jié)果即可。如果為 false,則說明輸入的值為負(fù)數(shù),因此返回結(jié)果乘以 -1:reverseNum
,它接受一個(gè)數(shù)字。然后,初始化一個(gè)新變量,調(diào)用result
并將其設(shè)置為零。結(jié)果就是你最終將返回的結(jié)果:function?reverseNum(num)?{
????let?result?=?0
????//...
????return?result
}function?reverseNum(num)?{
????let?result?=?0
????while?(num?>?0)?{
????????//...
????}
????return?result
}13%10
,結(jié)果將為 3,因?yàn)?13/10 的余數(shù)為 3。在此算法中,您需要重復(fù)獲取輸入數(shù)字的最后一個(gè)值,這可以使用模來完成
function?reverseNum(num)?{
????let?result?=?0
????while?(num?>?0)?{
????????let?mod?=?num?%?10
????????//...
????}
????return?result
}function?reverseNum(num)?{
????let?result?=?0
????while?(num?>?0)?{
????????let?mod?=?num?%?10
????????num?=?Math.floor(num/10)
????????//...
????}
????return?result
}
結(jié)果
mod
num
0
3
12
0*10 +3 = 3
2
1
3*10 +2 = 32
1
0
32*10+1 = 321
function?reverseNum(num)?{
????let?pos?=?true
????if?(num?<?0)?{
????????pos?=?false
????????num?=?Math.abs(num)
????}
????let?result?=?0
????while?(num?>?0)?{
????????let?mod?=?num?%?10
????????num?=?Math.floor(num/10)
????????result?=?result?*?10?+?mod
????}
????//...
}
function?reverseNum(num)?{
????let?pos?=?true
????if?(num?<?0)?{
????????pos?=?false
????????num?=?Math.abs(num)
????}
????let?result?=?0
????while?(num?>?0)?{
????????let?mod?=?num?%?10
????????num?=?Math.floor(num/10)
????????result?=?result?*?10?+?mod
????}
????return?pos???result?:?(-1?*?result)
}
文章為作者獨(dú)立觀點(diǎn),不代表DLZ123立場(chǎng)。如有侵權(quán),請(qǐng)聯(lián)系我們。( 版權(quán)為作者所有,如需轉(zhuǎn)載,請(qǐng)聯(lián)系作者 )

網(wǎng)站運(yùn)營(yíng)至今,離不開小伙伴們的支持。 為了給小伙伴們提供一個(gè)互相交流的平臺(tái)和資源的對(duì)接,特地開通了獨(dú)立站交流群。
群里有不少運(yùn)營(yíng)大神,不時(shí)會(huì)分享一些運(yùn)營(yíng)技巧,更有一些資源收藏愛好者不時(shí)分享一些優(yōu)質(zhì)的學(xué)習(xí)資料。
現(xiàn)在可以掃碼進(jìn)群,備注【加群】。 ( 群完全免費(fèi),不廣告不賣課!)