觀前提醒:
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
這題基本上,我是把每個字元拆開後存成 Array,再依題目要求一步步處理,詳情請參考下方 CODE 內的註解
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
// 先把 數字轉成Str,再把它逐一位數切開。
let xArray = x.toString().split("");
// i為第0位字元,j為最後一位字元。
let i = 0;
let j = xArray.length - 1;
// 宣告一個 temp,這是拿來做兩數交換時,可以暫存數值的口袋。
let temp = "";
//處理 edge case: 若首位為 "-",則 i 從 第 1 位字元開始。
if (xArray[0] === "-") {
i = 1;
}
// 當 i < j時,把頭尾兩數對調,然後頭指針+1,尾指針-1,兩者繼續對調。
while (i < j) {
temp = xArray[i];
xArray[i] = xArray[j];
xArray[j] = temp;
i++;
j--;
}
// 把對調完的 xArray,用 join("")直接拼成答案。
let answer = xArray.join("");
// 處理 edge case: 若答案大於 2 ** 31 - 1 or 小於 (-2) ** 31,直接return 0。
// 承上,反之則直接 return answer。
if (answer > 2 ** 31 - 1 || answer < (-2) ** 31) {
return 0;
} else {
return answer;
}
};
基本上,大家跟著我的 code 跟註解,一行行讀下來的話,應該不至於不好理解,若不理解者,可以使用 chrome 裡面的 debugger 功能(教學文),試著自己跑跑看~有問題煩請在下面留言發問歐~
謝謝大家收看
如果運算環境只能儲存 32-bit 以下的整數,那在您的算法中,組合出 answer 的時候,應該就已經溢位了?