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

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用户

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值