[路飞]_LeetCode题7整数反转

276 阅读1分钟

题目描述

给你一个 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… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解思路

  1. 题目是操作一个整数进行反转,那么我们可以自然想到利用数组的reverse函数一步到位。
  2. 将x转为字符串,利用substring截取"-"号之后的数字部分,如果是正整数就不需要截取。
  3. 字符串转为数组,利用数组的reverse函数进行反转。
  4. 利用数组的join函数重新拼接成字符串,根据之前判断的是否为负数,在反转后的字符串前加上"-"。
  5. 字符串转整数,判断是否反转后数值越界,返回相应结果。

题解代码

/*
 * @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