题目描述
给你一个 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
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解思路
- 题目是操作一个整数进行反转,那么我们可以自然想到利用数组的reverse函数一步到位。
- 将x转为字符串,利用substring截取"-"号之后的数字部分,如果是正整数就不需要截取。
- 字符串转为数组,利用数组的reverse函数进行反转。
- 利用数组的join函数重新拼接成字符串,根据之前判断的是否为负数,在反转后的字符串前加上"-"。
- 字符串转整数,判断是否反转后数值越界,返回相应结果。
题解代码
/*
* @lc app=leetcode.cn id=7 lang=javascript
*
* [7] 整数反转
*/
// @lc code=start
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
const upper = Math.pow(2,31) - 1;//上边界
const lower = Math.pow(-2,31);//下边界
let rev = x.toString();//先转字符串便于后续操作
//判断是否为负数,负数的话需要将符号位去除
//取出数字部分转数组利用reverse方法反转再转为字符串
//加上符号为之后转为整数
rev = rev.charAt(0) === "-"?
"-" + rev.substring(1).split('').reverse().join(''):
rev.split('').reverse().join('');
//根据边界条件返回对应数值
return (Number(rev) > upper || Number(rev) < lower)?
0: Number(rev);
};
// @lc code=end