leetcode-7-整数反转

1,135 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

题目地址

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

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

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

示例 1:

输入: x = 123
输出: 321

示例 2:

输入: x = -123
输出: -321

示例 3:

输入: x = 120
输出: 21

示例 4:

输入: x = 0
输出: 0

 

提示:

  • -231 <= x <= 231 - 1

解题思路

要翻转一个数字,直接翻转肯定是没有办法的,但是我们知道数组有一个 reverse 方法用于颠倒数组中元素的顺序,所以问题的第一步就变成了如何把数字转成数组。
但是数字转数组也是没有办法的,但是我们知道字符串有一个 split 方法用于把一个字符串分割成字符串数组,所以问题的第一步变成了如何把数字转成字符串。
数字转字符串通过调用其原型上的 toString 方法即可,所以将数字转成数组并颠倒数组中元素的顺序通过

x.toString().split('').reverse()

即可。
顺序颠倒完成后,我们还需要再将其变成数字,有了刚才的经验,我们知道只需要将数组通过 join 方法拼接成字符串,字符串再通过数学运算 *1 即可转成数字。
但是本题中还有一个情况需要特殊处理一下,就是给定的数字可能为负数,而这样颠倒后负数的负号 - 就到了数组的末尾,所以在将数组转成数字之前要判断数组的末尾元素是否是 -,如果是的话,要将其从数组末尾放到数组开头。
通过以上步骤,我们就得到了翻转后的 x,但是在返回之前还要判断一个边界条件,就是是否超出了指定范围 [−231,  231 − 1],如果超出,则返回 0,否则返回翻转后的 x

代码实现

var reverse = function(x) {
    x = x.toString().split('').reverse()

    if(x.at(-1)==='-'){
        x.unshift(x.pop())
    }

    x = x.join('')*1

    if(x<-Math.pow(2,31) || x>(Math.pow(2,31)-1)){
        return 0
    }

    return x
}

至此我们就完成了 leetcode-7-整数反转

如有任何问题或建议,欢迎留言讨论!