翻转整数(2)

2020-07-02  本文已影响0人  洲洲哥

翻转整数

要求

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

输入: 123

输出: 321

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解题思路如下

注意:
我们借鉴欧几里得求最大公约数的方法来解题。符号的处理逻辑同方法一,这里我们通过模 10 取 到最低位,然后又通过乘 10 将最低位迭代到最高位,完成翻转。

详解如下

详解
1. 设置边界极值;
2. 取给定数值的绝对值,遍历循环生成每一位数字,借鉴欧几里得算法,从 num 的最后一位开
始取值拼成新的数
3. 同步剔除掉被消费的部分
4. 如果最终结果为异常值,则直接返回 0;如果原本数据为负数,则对最终结果取反
5. 返回最终结

代码如下

function reverse(x){
    // 获取相应数的绝对值
    let rever = Math.abs(x);
    //极值
    const MAX = 2147483647;
    const MIN = -2147483648;

    let nums = 0;
    while(rever !== 0){
        // 借鉴欧几里得算法,从 nums 的最后一位开始取值拼成新的数
        mods = rever % 10;
        nums = mods + nums * 10; 
        // 剔除掉被消费的部分
        rever = Math.floor(rever / 10)
    }
    // 异常值
    if (nums >= MAX || nums <= MIN) {
        return 0;
    }
    if (x < 0) {
      return nums * -1;
    }
    return nums;
}
复杂度分析:

本文提供更多的面试算法题解,有利于各位看官,快速理解,更多了解,现在被问到频率最高的算法题。

如果你觉得可以请扫描我的公众号
第一时间推送,洲洲
上一篇 下一篇

猜你喜欢

热点阅读