題目詳情:
給(gei)你一個 32 位的有(you)符號整數(shu) x ,返(fan)回(hui)將 x 中的數(shu)字(zi)部分反轉后的結果。
如果反轉后(hou)整數超過 32 位的(de)有符號(hao)整數的(de)范圍 [−231, 231 − 1] ,就返回 0。
假設環境不允許存儲 64 位整數(有符號(hao)或無(wu)符號(hao))。
示例:
輸入:x = 123
輸出:321
解題思路:
使用循環將給定整數 x 的數字部分進行反轉。首先定義一個變量 result 來(lai)存儲(chu)反轉后的結果(guo),初始值為 0。
然后不斷取 x 的個位數字,并將其添加到 result 中。具體做法是,每次循環通過取余操作 x % 10 獲取 x 的個位數字,并將其加到 result 中。同時需要更新 x,將已經處理過的個位數字去除,即通過整除操作 Math.trunc(x / 10)。
在每次循環中都判斷反轉后的整數 result 是否超出了有符號 32 位整(zheng)數的(de)范圍。如果是,則直(zhi)接返回 0。
最后,函數返回反轉后的結果 result。
代碼實現:
function reverse(x) {
let result = 0;
while (x !== 0) {
// 取出 x 的個位數字
const digit = x % 10;
// 將個位數字添加到結果中
result = result * 10 + digit;
// 判斷反轉后的整數是否超出范圍
if (result < Math.pow(-2, 31) || result > Math.pow(2, 31) - 1) {
return 0;
}
// 更新 x,去除已經處理的個位數字
x = Math.trunc(x / 10);
}
return result;
}
// 示例輸入
const x = 123;
// 調用函數獲取反轉后的結果
const result = reverse(x);
// 輸出結果
console.log(result);