整数翻转 | 刷题打卡

66 阅读1分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一.题目描述

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

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

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

二.思路分析

拿到题目首先觉得这个题不难啊,数组下表对调就可以啊,然鹅,上手之后发现考虑的真多

正常流程

  1. 输入的x是数字,需要转换为数组 (toString)
  2. 下表对调后拿到的是数组y,需要再转换为字符串(join)
  3. join后的字符串 带, 所以需要替换 replace(/,/g, '')
  4. 拿到字符串后需要转为数字 (parseInt) 边角逻辑
  5. 正负数需要区分
  6. 整数范围需要区分 ([out > 2147483647 || out < -2147483648])

三.AC代码

var reverse = function(x) {
    let arr = [] //传入的number
    let res = [] // 翻转后
    let out = 0  //最终结果
    if(x < 0){
        arr = x.toString().split('').slice(1)
    }else {
        arr = x.toString().split('')
    }
    for(let i=0; i< arr.length; i++) {
        res[arr.length-i] = arr[i]
    }
    let string = res.join('').replace(/,/g, '')
    if(x < 0) string = '-' + string
    out = parseInt(string)
    if(out > 2147483647 || out < -2147483648) return 0
    return out
};

四. 总结

不要小瞧任何一道算法题,思路严谨缜密最重要