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

tech2022-07-10  203

leetcode刷题记录

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

示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 示例 4: 输入:1534236469 输出:0

第一种解题思路

新建一个变量作为结果变量赋值为 0将取余的结果通过 result * 10 + x % 10 赋值给结果 result 变量对参数进行运算去掉末尾的数字 通过 | 运算符去掉小数部分 (x / 10)| 0通过位运算符对返回的结果进行溢出判断 在执行位运算之前,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用户

第二种解题思路

判断是否为正数将输入的数字类型的数字转换为 String 类型的数据将字符型的数据转换为数组之后通过数组的 reverse 方法翻转数组 再通过 join 方法分隔数组转换为字符型数据后转换为数字类型的数据通过第一步对数据的正负的判断以及溢出的判断处理返回的数据(与第一种判断方法一致)(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用户

最新回复(0)