[LeetCode-0007题-反转整数] | 刷题打卡

我心飞翔 分类:javascript

掘金团队号上线,助你 Offer 临门! 点击 查看详情

一、题目描述

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

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

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

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

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

eg3:
输入:x = 120
输出:21

eg4:
输入:x = 0
输出:0
 

二、思路分析

思路一:转字符串反转
    1.首先想到的是要分类讨论,分为 <0  和 >= 0
    2.还要注意反转后的结果 是否在 [−2^31,  2^31 − 1]范围内
思路二:取余法
 

三、解题代码

  1. 思路一: 转字符串反转
  /**
    * @param {number} x
    * @return {number}
    */
    
var reverse = function(x) {
    let result = x.toString().split('').reverse().join('')
    if (x < 0) {
        return -result < -Math.pow(2, 31) ? 0 : -result
    }
    return +result > (Math.pow(2, 31) - 1) ? 0 : +result
};

 
  1. 思路二: 取余法
/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    let abs = Math.abs(x) // 先取个绝对值,正负号留到后面判断
    let now = 0
    while(abs > 0) {
        now = now * 10 + abs % 10 // 取余反转
        abs = Math.floor(abs / 10)
    }
    if (x < 0) {
        return now <= Math.pow(2, 31) ? -now : 0
    } else {
        return now > (Math.pow(2, 31) - 1) ? 0 : now
    }
};

 

四、总结

  • 主要考察数字的一些操作方法,例如Math.abs(), Math.pow()等等。
  • 本题细心一点就好。

回复

我来回复
  • 暂无回复内容