翻转整数(2)

翻转整数 要求 给出一个 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; }

复杂度分析:
  • 时间复杂度: O(n)
    代码中使用for循环,次数为 n,即整数的长度,因此时间复杂度为 O(n)。
  • 空间复杂度: O(1)
    算法中只用到常数个变量,因此空间复杂度为 O(1)。
【翻转整数(2)】本文提供更多的面试算法题解,有利于各位看官,快速理解,更多了解,现在被问到频率最高的算法题。
如果你觉得可以请扫描我的公众号 翻转整数(2)
文章图片
第一时间推送,洲洲

    推荐阅读