天天看点

leetcode刷题记录(整数反转) 采用的语言为JavaScriptleetcode刷题记录

leetcode刷题记录

题目描述

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

示例 1:
输入: 123
输出: 321

示例 2:
输入: -123
输出: -321

示例 3:
输入: 120
输出: 21

示例 4:
输入:1534236469
输出:0
           

第一种解题思路

  1. 新建一个变量作为结果变量赋值为 0
  2. 将取余的结果通过 result * 10 + x % 10 赋值给结果 result 变量
  3. 对参数进行运算去掉末尾的数字 通过 | 运算符去掉小数部分 (x / 10)| 0
  4. 通过位运算符对返回的结果进行溢出判断 在执行位运算之前,JavaScript 将数字转换为 32 位有符号整数,所以如果溢出的话那么运算前后的结果是不一样的 (result | 0) == result ? result : 0。
var reverse = function(x) {
    let result = 0;
    while (x!==0){
        result = result * 10 + x % 10;
        x = (x / 10) | 0
    }
    return (result | 0) == result ? result : 0;
};
           

结果

执行耗时:96 ms,击败了68.01% 的JavaScript用户

内存消耗:40.5 MB,击败了5.03% 的JavaScript用户

第二种解题思路

  1. 判断是否为正数
  2. 将输入的数字类型的数字转换为 String 类型的数据
  3. 将字符型的数据转换为数组之后通过数组的 reverse 方法翻转数组 再通过 join 方法分隔数组转换为字符型数据后转换为数字类型的数据
  4. 通过第一步对数据的正负的判断以及溢出的判断处理返回的数据(与第一种判断方法一致)(result | 0) == result ? positiveNumber ? result : -result : 0
var reverse = function(x) {
    let positiveNumber = x > 0
    var value = String(Math.abs(x));
    let result = [...value].reverse().join('') * 1
    return (result | 0) == result ? positiveNumber ? result : -result : 0;
};
           

结果

执行耗时:112 ms,击败了27.33% 的JavaScript用户

内存消耗:40.6 MB,击败了5.03% 的JavaScript用户