本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一.题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
二.思路分析
拿到题目首先觉得这个题不难啊,数组下表对调就可以啊,然鹅,上手之后发现考虑的真多
正常流程
- 输入的x是数字,需要转换为数组 (toString)
- 下表对调后拿到的是数组y,需要再转换为字符串(join)
- join后的字符串 带, 所以需要替换 replace(/,/g, '')
- 拿到字符串后需要转为数字 (parseInt) 边角逻辑
- 正负数需要区分
- 整数范围需要区分 ([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
};
四. 总结
不要小瞧任何一道算法题,思路严谨缜密最重要