题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
一. 字符串翻转
先将数字转换为字符串,再将字符串翻转之后转换为数字,并考虑边界即可。
js实现
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
var plus = true
if (x < 0) {
plus = false
x = -x
}
// 翻转字符串
var s = x.toString()
var sList = s.split('')
sList.reverse()
s = sList.join('')
// 去除头部的`0`
s.replace(/\b(0+)/gi,"")
// 判断是否溢出
if (plus) {
if (s.length > 10 || s.length === 10 && s > "2147483647") {
return 0
}
} else {
if (s.length > 10 || s.length === 10 && s > "2147483648") {
return 0
}
}
if (plus) {
return Number(s)
}
else {
return -Number(s)
}
};
复杂度分析
时间复杂度:O(n)
空间复杂度:O(n)
测试结果
✔ Accepted
✔ 1032/1032 cases passed (84 ms)
✔ Your runtime beats 95.02 % of javascript submissions
✔ Your memory usage beats 51.91 % of javascript submissions (35.7 MB)
二. 直接使用数字进行翻转
取输入数字的个位,将结果乘十后再加上这个数再作为结果,知道输入数字为0,返回结果即可。
js实现
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
var answer = 0
var plus = true
if (x < 0) {
plus = false
x = -x
}
while (x > 9) {
var remain = x % 10
x = (x - remain) / 10
answer = answer * 10 + remain
}
if (plus) {
if (2147483647 - x < answer * 10) {
return 0
} else {
return answer * 10 + x
}
} else {
if (2147483648 - x < answer * 10) {
return 0
} else {
return - (answer * 10 + x)
}
}
};
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)
测试结果
✔ Accepted
✔ 1032/1032 cases passed (80 ms)
✔ Your runtime beats 98.54 % of javascript submissions
✔ Your memory usage beats 88.03 % of javascript submissions (35.5 MB)

5401

被折叠的 条评论
为什么被折叠?



