給你一個(gè) 32 位的有符號(hào)整數(shù) x ,返回將 x 中的數(shù)字部分反轉(zhuǎn)后的結(jié)果。
如果反轉(zhuǎn)后整數(shù)超過(guò) 32 位的有符號(hào)整數(shù)的范圍 [?231, 231 ? 1] ,就返回 0。
假設(shè)環(huán)境不允許存儲(chǔ) 64 位整數(shù)(有符號(hào)或無(wú)符號(hào))。
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-integer
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
思路一:
轉(zhuǎn)換成數(shù)組,然后反轉(zhuǎn)數(shù)組,這個(gè)方法太麻煩了,不去實(shí)現(xiàn)了
思路二:
俗話說(shuō),學(xué)好數(shù)理化,走遍天下都不怕。所以我們用數(shù)學(xué)的方法來(lái)解決這道題。我們對(duì)數(shù)字依次取模,就可以得到倒序的結(jié)果了
假設(shè)數(shù)字num = 20001128,result = 0
- num % 10 = 8, result = 8,num = (num / 10) | 0 也就是2000112
- num % 10 = 2, result = 8*10 + 2也就是82, num = (num / 10) |0 也就是200011
依次往下計(jì)算,最終可以得到結(jié)果,最后的結(jié)果reuslt | 0如果不等于reuslt, 說(shuō)明超出了范圍,返回0。
這里的 | 0 就很妙,表示取整,超過(guò)32位的整數(shù)轉(zhuǎn)換結(jié)果不等于自身,就可以用來(lái)判斷是否溢出了。
代碼實(shí)現(xiàn)
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let result = 0;
while(x !== 0) {
result = result * 10 + x % 10;
x = (x / 10) | 0;
}
return (result | 0) === result ? result : 0;
};