[LeetCode] JavaScript 解题 — 整数翻转
一、题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [-2147483647, 2147483647]
。
请根据这个假设,如果反转后整数溢出那么就返回 0。
二、示例
示例 1
- 输入: 123
- 输出: 321
示例 2
- 输入: -123
- 输出: -321
示例 3
- 输入: 120
- 输出: 21
三、构造输入输出
需要注意的是,翻转的时候 -
是需要提到前面的,并不是在后面
00000
这么多 0
在前面,需要去掉最前面的 0
最后需要比较大小防止溢出。
- let str = '120';
- str = '-1000002';
- str = '-100000';
- str = '00000';
- str = '1534236469';
- console.log(reverse(str));
四、JavaScript 解题
这个题还是很简单,不过比较 hack 的就是,本质上,javascript 只有 number 的类型,因此无论如何,我可以直接比较 2147483647
和 -2147483647
的大小。
如果按照正规的解法,应该比较两个字符串或者是数组的解法才对。
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
return getResult(x);
};
function getResult(x) {
const arr = x.toString().split('').reverse(); // 数组反转
let res = '';
let start = 0;
let len = arr.length;
if (arr[len - 1] === '-') { // 如果反转之后最后一个是 - 则把 - 提到最前面
res = arr[len - 1];
len = len-1; // 长度 -1
};
let hasNoZero = false; // 判断是否还是存在 0
for (let i = start; i < len; i++) {
if (arr[i] !== '0') hasNoZero = true; // 从第一个开始遍历,如果不存在 0 则可以拼接字符串
if (hasNoZero) res += arr[i];
}
// 大小判断
if(!res || res > 2147483647 || res < -2147483647) return '0';
return res;
}
比较两个字符串的大小,判断是否溢出,而不是直接比较数字。
文章已经结束啦
文章版权:Postbird-There I am , in the world more exciting!
本文链接:http://www.ptbird.cn/leetcode-reverse-integer.html
转载请注明文章原始出处 !
扫描二维码,在手机阅读!