首页 > 编程语言 >算法题-JS实现整数反转

算法题-JS实现整数反转

时间:2024-06-23 15:01:54浏览次数:19  
标签:arr reverse 反转 JS 算法 let result 数组 minus

学习目标:


学习内容:

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例3:

输入:x = 120
输出:21

示例4:

输入:x = 0
输出:0

提示:

  • -2^31 <= x <= 2^31 - 1

解题思路1:
利用数组的reverse方法,首先判断是否为负数,如果为负数则记录下来并转换为不带符号的数字,然后转为数组再通过reverse方法反转后,变回数字,根据之前的负数记录选择是否乘-1,最后返回(注意判断一下边界值)。

代码如下:

/**
 * @param {string} s
 * @return {number}
 */
// 1.转数组,利用数组的reverse方法
var reverse = function (x) {
    let result = 0, // 最后返回的数
        Max = Math.pow(2, 31),  // 最大边界值
        str = x + '',
        minus = false;  // 是否是负数
    let arr = str.split('')
    if (arr[0] === '-') {
        minus = true
        arr.splice(0, 1)
    }
    arr.reverse()
    str = arr.join('')
    result = minus ? +str * -1 : +str  // 判断是否是负数,是就转成数字后乘-1
    return result > Max || result < Max * -1 ? 0 : result
};

解题思路2:
利用双指针的做法,前面的步骤与思路1类似,都是转换为数组,之后判断数组长度是否是奇数,如果是,单独保存一下中间的数,然后把中间值从数组中剔除,之后设置左指针为数组第一项,右指针为数组最后一项,不断让两个指针指向的值进行交互,直到左指针不小于右指针为止。然后再在之前删除中间值的位置吧中间值加回去,再变回数字,剩下的步骤与思路1一致,不再赘述。

var reverse = function (x) {
    if (x === 0) return x
    let minus = false
    let arr = [];
    if (x < 0) {
        minus = true
        arr = (x * -1 + '').split('')
    } else {
        arr = (x + '').split('')
    }
    let result
    let middleIndex = -1,
        middle

    if (arr.length % 2 !== 0) {  // 说明长度是奇数
        middleIndex = Math.floor(arr.length / 2)  // 取中间值的index
        middle = arr[middleIndex] // 保存中间值
        arr.splice(middleIndex, 1)
    }
    let left = 0;
    let len = arr.length;
    let right = len - 1;
    while (left < right) {
        let temp = arr[right]
        arr[right] = arr[left]
        arr[left] = temp
        left++
        right--
    }
    if (middle) {
        arr.splice(middleIndex, 0, middle)  // 将中间值加回数组的中间位置
    }
    result = +arr.join('')
    if (minus) {
        result *= -1
    }
    return result > Math.pow(2, 31) || result < Math.pow(2, 31) * -1 ? 0 : result
}

标签:arr,reverse,反转,JS,算法,let,result,数组,minus
From: https://blog.csdn.net/weixin_45231569/article/details/139900053

相关文章

  • 智能优化算法应用:基于平衡优化器算法PID参数优化 - 附代码
    智能优化算法应用:基于平衡优化器算法PID参数优化-附代码文章目录智能优化算法应用:基于平衡优化器算法PID参数优化-附代码1.PID简介2.平衡优化器算法简介3.适应度函数设计4.算法实验与结果5.参考文献:6.Matlab代码摘要:本文主要介绍如何用平衡优化器算法进行PID参......
  • 分类判决界面---W-H、H-K算法
        本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记:   AI学习笔记(9)---《分类判决界面---W-H、H-K算法......
  • 海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFl
    一、介绍海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物(‘蛤蜊’,‘珊瑚’,‘螃蟹’,‘海豚’,‘鳗鱼’,‘水母’,‘龙虾’,‘海蛞蝓’,‘章鱼’,‘水獭’,‘企鹅’,‘河豚’,‘魔鬼鱼’,‘......
  • 聚类算法(2)--- ISODATA算法
           本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记:      AI学习笔记(8)---《聚类算法(2)---ISODATA算......
  • 基于协同过滤算法的智能推荐系统基础介绍
    协同过滤算法概述协同过滤算法的核心思想是通过用户或物品的相似性进行推荐。该算法主要分为两类:基于用户的协同过滤(User-basedCollaborativeFiltering):寻找相似的用户群体,推荐他们喜欢的产品给目标用户。基于物品的协同过滤(Item-basedCollaborativeFiltering):根据用户的历......
  • 毕业设计-基于SSM+JSP的毕业生就业信息管理系统的设计与实现(源码+LW+包运行)
    基于SSM+JSP的毕业生就业信息管理系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Jsp工具:IDEA/Ecilpse、Navicat、Maven本文以jsp为开发技术,实现了一个毕业生就业信息管理系统。毕业生就业信息管理系统的主要使用者分为管理员、学生、就业导师、企业,管理员如下权......
  • 关联规则分析:Apriori算法及其应用
    关联规则分析基础在数据挖掘领域,关联规则分析是一种发现变量之间有趣关系的技术。这种关系通常被描述为“如果...那么...”的模式,例如,“如果一个顾客购买了面包,那么他们也很可能会购买黄油”。Apriori算法是最著名的关联规则挖掘算法之一,广泛应用于市场篮子分析。本事务库与项集......
  • AcWing算法基础课笔记——求组合数3
    求组合数Ⅲ20万组数据,1≤b≤a≤1......
  • [本科项目实训] Node.js、npm、pnpm配置及GLIBC_2.28缺失解决方案
    问题描述Node.js是一个基于Google的V8引擎的事件驱动I/O服务端JavaScript环境。以下主要解决在Ubuntu环境中的Node配置问题。解决方案使用node-v可以查看当前的node版本,如果未安装node和npm可以尝试以下指令:aptupdateaptupgradeapt-getinstallnodejsapt-get......
  • [nodejs]package.json里的依赖版本
    依赖分类依赖根据开发环境需要和实际运行环境需要,分为dependencies和devDependencies。例如:typescript和eslint属于devDependencies,而vue和axios等属于dependencies。版本号组成版本由两部分组成,一是前面的前缀符号,二是版本号。这里先介绍版本号。版本号版本号的形式是:a.b......