持续创作,加速成长!这是我参与「掘金日新计划 · 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-整数反转
如有任何问题或建议,欢迎留言讨论!