5-整数反转Reverse Integer
题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21 注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−$2^{31}$, $2^{31}$ − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解答
先转成字符串,通过array反转
如果是正数,就反转
如果是负数,就拆了负号,反转,再按回负号
提交前判断溢出的情况
作者:cuidingfeng 链接:https://leetcode-cn.com/problems/two-sum/solution/jszheng-shu-fan-zhuan-by-cuidingfeng/
var reverse = function(x) {
let sign = "",
result;
if (x < 0) {
sign = "-";
x = -x;
}
result = x
.toString()
.split("")
.reverse()
.join("");
if (
result.length > 10 ||
(result.length === 10 && result > (x < 0 ? "2147483648" : "2147483647"))
) {
return 0;
} else {
return sign + result;
}
};
Runtime: 68 ms, faster than 94.53% of JavaScript online submissions for Reverse Integer.
Memory Usage: 35.9 MB, less than 45.88% of JavaScript online submissions forReverse Integer.
直接操作数字反转
探险过程
题目意思是,给一串数字,按位反着输出,如果在 [−$2^{31}$, $2^{31}$ − 1]之外,就输出0。 那么数字怎么反着输出呢? 记得数组有反转的方法:.reverse()
所以思路是:数字转数组,数组反一下,再转回数字。 不过number[]
转回数字好像不太方便,因此就用字符串过渡一下。
var reverse = function(x) {
let sign = "";
if (x < 0) {
sign = "-";
x = -x;
}
const reverse = x
.toString()
.split("")
.reverse()
.join("");
if (reverse > (x > 0 ? 2147483647 : 2147483648)) {
return 0;
}
return parseInt(sign + reverse, 10);
};
Runtime: 80 ms, faster than 68.53% of JavaScript online submissions forReverse Integer.
Memory Usage: 36 MB, less than 36.74% of JavaScript online submissions for Reverse Integer.
想办法优化一下? if
判断的时候可以没必要直接计算reverse
的值,可以先判断长度。
长度长于10,必然溢出
长度等于10,再上判断
...
if (
result.length > 10 ||
(result.length === 10 && result > (x < 0 ? "2147483648" : "2147483647"))
) {}
...
测试代码
const reverse_test = () => {
for (let index = 0; index < testData.length; index++) {
const test = testData[index];
const ans = parseInt(reverse(test.nums), 10);
// 用parseInt把字符串转number,最好要加个后缀
ensure(ans, test.ans, "reverse" + index);
}
};
Last updated
Was this helpful?