原題鏈接:
https://leetcode.cn/problems/reverse-integer
解題思路:
- 使用
result存儲(chǔ)反轉(zhuǎn)后結(jié)果,初始值為0。 - 每次循環(huán)取出
x的個(gè)位數(shù)curr,再將x向右移動(dòng)一位。 - 將
result向左移動(dòng)一位,并將curr存入result的個(gè)位數(shù)。 - 不斷循環(huán)直到
x為0,即可完成反轉(zhuǎn)。 -
x為負(fù)數(shù)時(shí),正整數(shù)部分的反轉(zhuǎn)結(jié)果與正數(shù)是一樣的。因此可以將x都轉(zhuǎn)為正整數(shù)處理,完成后再判斷是否需要返回負(fù)數(shù)。
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
let result = 0; // 儲(chǔ)存結(jié)果
// 正負(fù)數(shù)除了符號(hào)以外,處理結(jié)果是一樣的,因此都轉(zhuǎn)換為正數(shù)處理
let pos = x > 0 ? x : Math.abs(x);
// 不斷循環(huán)直到pos為0
while (pos !== 0) {
// 取出pos的個(gè)位數(shù)字
const curr = pos % 10;
// 將result向左移動(dòng)一位,將curr存入result的個(gè)位,完成一次反轉(zhuǎn)
result = result * 10 + curr;
// 將pos向右移動(dòng)一位,并去除小數(shù)
pos = Math.floor(pos / 10);
// 如果移動(dòng)后的結(jié)果大于2^31 ? 1,則返回0
if (result > 0x7fffffff) {
return 0;
}
}
// 判斷x的正負(fù),并返回相應(yīng)結(jié)果
return x > 0 ? result : -result;
};