leetcode-字符串-7-整数反转

7. 整数反转

描述

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

示例 1

    输入: 123
    输出: 321

示例 2

    输入: -123
    输出: -321

示例 3

    输入: 120
    输出: 21

思路 1

  • 将非符号部分进行翻转,最后补充符号

详解 1

  • 1.首先设置边界极值;
  • 2.使用字符串的翻转函数进行主逻辑;
  • 3.补充符号
  • 4.然后拼接最终结果

解法 1

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    if( typeof x !== 'number') return;

    const MAX = 2147483647;
    const MIN = -2147483648;

    let y = x > 0 ? 
        x.toString().split('').reverse().join('') : 
        x.toString().slice(1).split('').reverse().join('');

    let res = x > 0 ? parsetInt(y , 10) : 0 - parseInt(y, 10)

    if(res > MIN && res < MAX ){
        return res;
    }
    return 0;
};

复杂度分析 1

  • 时间复杂度:O(n)

    • 代码中 reverse 函数时间复杂度为 , 为整数长度,因此时间复杂度为 ,考虑到32位整数最大长度为 11,即 -2147483648,也可认为是常数时间复杂度 。
  • 空间复杂度:O(n)

    • 代码中创建临时 String 对象, 为整数长度,因此空间复杂度为 ,考虑到32位整数最大长度为11,即-2147483648,因此空间复杂度为 。

思路 2

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

详解 2

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

代码

    /**
     * @param {number} x
     * @return {number}
     */
    const reverse = (x) => {
        let int = Math.abs(x);
        const MAX = 2147483647;
        const MIN = -2147483648;
        let num = 0;

        while(int !== 0 ){
            num = int % 10 + num * 10;
            int = Math.floor(int / 10)
        }

        if( int < MIN || int > MAX){
            return 0;
        }
        if(x < 0 ){
            return -1 * num;
        }
        return num;
    };

   转载规则


《leetcode-字符串-7-整数反转》 朝飞 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
leetcode-字符串-242-有效的字母异位词 leetcode-字符串-242-有效的字母异位词
242.有效的字母异位词描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1 输入: s = "anagram", t = "nagaram"
2020-05-16
下一篇 
scrollWidth,clientWidth,offsetWidth的区别 scrollWidth,clientWidth,offsetWidth的区别
scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大。 clientWidth:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变。 offsetWidth:对象整体的实际宽度,
2020-05-15
  目录