leetcode 刷题记:7. 整数反转

在 js 中,经常遇到把字符串反转的情况,一般是把字符串转为数组,反转数组后再转为字符串。

1
a.split("").reverse().join("")

如果遇到的是数字呢?

问题描述

给你一个 32 位的有符号整数 $x$ ,返回将 $x$ 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

1
2
3
4
5
6
7
8
9
10
11
// @algorithm @lc id=7 lang=javascript 
// @title reverse-integer
// @test(1534236469)=0
// @test(123)=321
// @test(-123)=-321
// @test(120)=21
// @test(0)=0
/**
* @param {number} x
* @return {number}
*/

解题思路

可以把数字转为字符串处理,指定是整数,也就是没有小数部分。只要转换为字符串,对字符串中的字符逐一操作,就能把数字进行反转。那符号怎么办?用一个变量来保存一个乘数,若是负数就存-1,否则是1

代码:

1
2
3
4
5
6
7
8
9
10
11
12
const reverse = function(x) {
const flag = x < 0 ? -1 : 1;
x *= flag;
x += "";
let res = 0;

for (let index = x.length - 1; index > -1; index--) {
res = x[index] - 0 + res * 10;
}

return res <= 2 ** 31 - 1 && flag * res >= -(2 ** 31) ? res * flag : 0;
};

这里用到了很多 js 的诡异的操作:

1
2
3
4
// 数字转字符串
x += "";
// 字符串数字转数字
x -= 0;

leetcode 刷题记:7. 整数反转
https://bubao.github.io/posts/92582f35.html
作者
一念
发布于
2021年3月22日
许可协议