这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战
写在前面:
- 个人前端网站:zhangqiang.hk.cn
- 欢迎加入博主的前端学习qq交流群::706947563,专注前端开发,共同学习进步!
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
2 解析1 (本人的代码)
2.1 解题思路
首先,将这个整理分解逆序放到一个数组里,然后再将数组里的每个数依次组合成新数,则为反转的数。
细节:
(1) 要记录符号位是否小于0,后面要乘以-1将其变成负数;
(2) 逆序后的数判断是否超过范围;
(3) 123/10 得到的结果是12.3,我们要加个parseInt()取整才行;
(4) 这个点我找了好久才发现! -5%2 得到的结果是 -1 !也就是说,负数取余,得到的还是负数,这个问题就很大了,那么应该在一开始判断是否为负数,然后再用Math.abs()将其变为正数。
2.2 代码
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let tempArr=[],reverseNum=0,valueSymbol=1;
if(x<0){
valueSymbol=-1;
x=Math.abs(x);
}
while(x){
tempArr.push(x%10);
x=parseInt(x/10);
}
tempArr.map((item)=>{
reverseNum=reverseNum*10+item;
})
reverseNum=valueSymbol===-1?-reverseNum:reverseNum;
if(reverseNum>Math.pow(2,31)-1||reverseNum<-Math.pow(2,31)){
return 0;
}
return reverseNum;
};
3 解析2 (大佬的代码)
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
let y = parseInt(x.toString().split("").reverse().join(""));
if (x < 0)
y = - y;
return y > 2147483647 || y < -2147483648 ? 0 : y;
};
大佬的代码言简意赅。 但是自己的代码还是要看的,因为那才是自己的真实水平,膜拜大佬,像大佬学习!