「LeetCode」7-整数反转

191 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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的。