持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
一.题目:
7. 整数反转 给你一个 32 位的有符号整数
x,返回将x中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入: x = 123
输出: 321
示例 2:
输入: x = -123
输出: -321
示例 3:
输入: x = 120
输出: 21
示例 4:
输入: x = 0
输出: 0
二、思路分析:
今天来分享一道算法题,关于数字反转的题目,首先看题目要求,不超过某个范围的任何整数都能够进行反转,最后结果输出反转后的数字。这道题目首先拿起来就应该把边界条件看清楚,如果用Number.MIN_SAFE_INTEGER就会产生错误,因为这个产生的安全数比给定的范围还要大一些,在判断完边界条件后,我们分情况进行讨论:
- 如果给定的数字大于
0,那么我们对他进行字符串的转换,然后将他转化为数组后利用数组独有的API反转数组对数组进行反转,随后在进行字符串的组合,最后的步骤是将它隐形转换为数字。 - 给定的数字如果小于
0的话,我们依然可以按照上述的方法进行转化最终得到反转后的正整数,随后利用-号对其进行转化。 - 如果是
0的话直接返回0即可。
三、代码:
function reverse(x: number): number {
//大于0,小于0
if(x > Math.pow(2,31)-1 || x < -Math.pow(2,31)){
return 0;
}
let res = 0;
function reverseNum(num: number): number{
return +num.toString().split('').reverse().join('');
}
if(x > 0){
res = reverseNum(x)
}else if(x < 0){
let temp = reverseNum(Math.abs(x));
res = -temp;
}
if(res > Math.pow(2,31)-1 || res < -Math.pow(2,31)){
return 0;
}
return res;
};
四、总结:
题目虽然写着中等的难度但是做起来还是思路算很简单的了,因为它没有什么特别的地方,当然如果不使用
JS的独特API也是可以完成题目的,就是变成循环交换即可,最后需要注意如果反转后的结果超出范围也是需要变为0的。