题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
一. 字符串翻转
先将数字转换为字符串,再将字符串翻转之后转换为数字,并考虑边界即可。
js实现
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('')
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实现
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)