算法题分析:反转整数

这篇具有很好参考价值的文章主要介绍了算法题分析:反转整数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近刷到了一道medium难度的算法题,比较典型,可以用语法特性和常规解法来解决。题目如下:

给定一个32字节的有符号整型数字x,将x反转过来返回。如果反转x会让其数值超出32位有符号整型数字范围[-2^31, 2^31 -1],那么就返回0。
假设运行环境不允许你存储64位整型数字(有符号或者无符号)。
Example 1:

Input: x = 123
Output: 321
Example 2:

Input: x = -123
Output: -321
Example 3:

Input: x = 120
Output: 21

约束条件:
-2^31 <= x <= 2^31 - 1

反转整数有两个大的思路,一个是把数字转换成字符串,然后把正负号单独保存,针对纯数字的字符串进行反转,当然还是要注意超出32位整型数值范围要返回0的边界情况。几乎所有编程语言都有大量针对字符串的内置函数,所以该算法非常取巧。

用js具体的解法如下:

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    let ans = x.toString().split('').reverse().join('');
    if (x < 0) {
        ans = ans.substr(0, ans.length -1) * -1;
    }
    if (x >= Math.pow(2, 31) -1 || x < -1 * Math.pow(2, 31)) return 0;
    return ans;
}

这个解法比较巧妙,绕过了传统思维里面针对数字的处理,但是空间复杂度效率不高。

另外一种解法就是通过除10来反转数字,具体如下:文章来源地址https://www.toymoban.com/news/detail-468336.html

var reverse = function(x) {
    if (x / 10 < 1) return x;
    let reverse  = 0;
    const isNegative = (x < 0) ? -1 : 1;
    let num  = num * isNegative;

    while (num >= 1) {
        diff = Math.floor(num % 10);
        reverse = reverse * 10 + diff;
        num = num /10;
    }

    if (num > Math.pow(2, 31) - 1) return 0;
    return num * isNegative;

}

到了这里,关于算法题分析:反转整数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分治法解二维的最近对问题,算法分析与代码实现,蛮力法与分治法解决二维的最近对问题的区别

    🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨,经典算法的解析✨都在这儿,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -  数据结构与算法_勾栏听曲_0 🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️ 📌个人主

    2024年02月04日
    浏览(29)
  • leetcode整数反转,js实现

    给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 整数反转,我们可以采用从后面往回读 读取最后一位 digit = x % 10; 拼接最新结果 result = result * 10 + digit; 边界条件: x = 0 直接返

    2024年02月12日
    浏览(29)
  • 代码训练LeetCode(14)整数反转

    代码训练(14)LeetCode之整数反转 Author: Once Day Date: 2024年4月9日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 190. 颠倒二进制位 - 力扣(LeetCode) 7. 整数反转 - 力扣(LeetCode) 力扣 (LeetCode) 全球极客挚爱的技术成长平台 1. 原题

    2024年04月27日
    浏览(25)
  • 力扣刷题笔记-07 整数反转

    狗看了都摇头的年纪,纯爱战士一败涂地。 temp用来保存个位数 res用来保存当前结果 123,取模运算,这样就可以获得最后一位。比如对123%10,得到temp=3. 判断res是不是溢出( 重点 ) 如果没有溢出,res扩大十倍,再加上个位数,就相当于是反转了。res = res * 10 + temp; 返回res。

    2024年02月08日
    浏览(32)
  • 【数据结构与算法分析】反转链表与顺序表(内含源码,思路清晰)

      顺序表和链表都是数据结构中常见的线性表。它们的主要区别在于 内存管理方式不同 。   顺序表(Array)是由一系列元素按照一定顺序依次排列而成,它使用连续的内存空间存储数据。顺序表使用一个数组来存储数据,数组中的每个元素都可以通过下标来访问。顺序

    2024年02月07日
    浏览(84)
  • 【算法专题--双指针算法】leecode-15.三数之和(medium)、leecode-18. 四数之和(medium)

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 双指针 常见的双指针有两种形式,一种是对撞指针,⼀种是左右指针。 对撞指针:一般用于顺序结构中

    2024年04月09日
    浏览(38)
  • 【算法专题--双指针算法】leecode-202. 快乐数(medium)、leecode-11. 盛最多水的容器(medium)

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 双指针 常见的双指针有两种形式,一种是对撞指针,⼀种是左右指针。 对撞指针:一般用于顺序结构中

    2024年03月23日
    浏览(30)
  • 给定一个非负整数a,返回>=a,并且离a最近的,2的某次方(java)

    给定一个非负整数num,如何不用循环语句,返回=num,并且离num最近的,2的某次方 题目交代不能用循环,我们可以用位运算解决这题. 举个例子. 7 的 二进制是 0000 0111 第一步 先减一,n = 0000 0110 第二步,上面减一得到的结果n 或上n 右移一位. n |= n 1; 第三步.n 在 或 n 右移2位. n |=

    2024年02月09日
    浏览(34)
  • c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)

    传送门 首先处理空字符串为空的情况() 再处理第一个字符可能为 + - 的情况,直接定一个 flag 初始化为1,遇到 - 就赋值为-1 接下来就利用迭代器进行循环,如果是字符数字就直接使用 ret = ret * 10 + (*it - \\\'0\\\'); 是其他字符,直接return 0;了 传送门 大家学习了c++,可能直接就想

    2024年01月23日
    浏览(68)
  • 【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转

    ========================================================================= 个人主页直达: 小白不是程序媛 LeetCode系列专栏: LeetCode刷题掉发记 ========================================================================= 目录 LeetCode 58.最后一个单词的长度 LeetCode169.多数元素 LeetCode 136.出现一次的数字 LeetCode 7.整数

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包