給你一個 32 位的有符號整數(shù) x 兔仰,返回將 x 中的數(shù)字部分反轉(zhuǎn)后的結(jié)果。
如果反轉(zhuǎn)后整數(shù)超過 32 位的有符號整數(shù)的范圍 [?231, 231 ? 1] ,就返回 0轧铁。
假設(shè)環(huán)境不允許存儲 64 位整數(shù)(有符號或無符號)。
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-integer
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有旦棉。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)齿风,非商業(yè)轉(zhuǎn)載請注明出處。
思路一:
轉(zhuǎn)換成數(shù)組绑洛,然后反轉(zhuǎn)數(shù)組救斑,這個方法太麻煩了,不去實(shí)現(xiàn)了
思路二:
俗話說真屯,學(xué)好數(shù)理化系谐,走遍天下都不怕。所以我們用數(shù)學(xué)的方法來解決這道題讨跟。我們對數(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, 說明超出了范圍薪寓,返回0。
這里的 | 0 就很妙澜共,表示取整向叉,超過32位的整數(shù)轉(zhuǎn)換結(jié)果不等于自身,就可以用來判斷是否溢出了嗦董。
代碼實(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;
};