【算法题】整数反转,一文彻底搞清!

目录

一、题目描述

二、解题思路

1、整数转为字符串

2、数学运算

三、参考答案


一、题目描述

整数反转

给你一个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

提示:

-231 <= x <= 231 - 1

二、解题思路

首先,我们需要明确题目中给定的整数是有符号的,即可以为正数也可以为负数。所以在进行反转操作时,我们需要保留原数的符号。其次,我们需要注意整数反转之后的结果可能会超出整数的范围。比如,反转后的结果可能会超出32位有符号整数的范围,即-2^31到2^31-1。因此,我们需要在进行反转操作时,判断反转后的结果是否超出了范围,如果超出了范围,则返回0。

1、整数转为字符串

这种方法就是将整数转换为字符串,然后进行反转操作。在这个过程中,我们通过捕获NumberFormatException异常来处理那些超出有符号整数范围的反转数据。具体来说,如果反转后的数字超出了整数的最大或最小限制,然后再将其转换回整数时会抛出该异常。在这种情况下,我们便返回0作为结果。

显然这种方法在实现上较为简单直观,但其时间效率并不理想。这是因为字符串与整数之间的转换以及后续的异常处理机制都带来了额外的计算开销。因此,如果对程序的时间性能有较高要求,我们可能需要考虑其他更高效的算法来执行整数的反转操作。

2、数学运算

该方法就是每次取末尾数字,并且判断此时去掉末尾数字后的x是否为0,为0就循环结束,不为0就继续循环,用取余10的方式不断将x的末尾数字取出,然后在不断的加到待返回值上,实现反转的效果。当然,这里也是需要判断反转的结果是否超出有符号整数的范围。如果超出的话,跳出循环,直接返回0。

三、参考答案

按照上述思路分析分别得出的参考代码如下,

整数转为字符串方法参考代码:

java 复制代码
class Solution {
    public int reverse(int x) {
     try{
       if(x>0){
               //将int类型的数字转换成字符串
        String str = new StringBuilder(x+"").reverse().toString();
        return str.startsWith("0") ?  Integer.valueOf(str.substring(1)):Integer.valueOf(str);
       }else if(x<0){
            //将int类型的数字转换成字符串
       String str = new StringBuilder(String.valueOf(x+"").substring(1)).reverse().toString();
       return str.startsWith("0") ?  Integer.valueOf("-"+str.substring(1)):Integer.valueOf("-"+str);
       }else{
           return x;
       }
       }catch(NumberFormatException e){
          return 0;
       }
    }
}

数学运算方法参考代码:

java 复制代码
   class Solution {
    public int reverse(int x) {
     int res = 0;
        while(x!=0) {
            //每次取末尾数字
            int tmp = x%10;
            //判断是否大于最大32位整数
            if (res>214748364 ) {
                return 0;
            }
            //判断是否小于最小32位整数
            if (res<-214748364) {
                return 0;
            }
            res = res*10 + tmp;
            x /= 10;
        }
        return res;
    }
}

综合以上分析,整数反转问题可以通过将整数转换为字符串或采用数学运算的方式来解决。每种方法都有其特点,但关键在于处理溢出问题,确保最终结果的准确性。尽管两种方法都能达到目的,我们更倾向于推荐使用数学运算的方法。相较于字符串转换,数学运算通常能提供更高的效率,特别是在处理大规模数据或要求高性能的应用场景中,这一优势尤为明显。因此,在考虑实现整数反转时,优先考虑数学方法将是更优的选择。

相关推荐
中微极客2 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
storyseek2 小时前
前缀和实现Kogge-Stone算法
数据结构·算法
元Y亨H3 小时前
开发者必须掌握的十大核心算法
算法
元Y亨H3 小时前
深度解构:数据结构与算法的理论基石与工程演进
数据结构·算法
元Y亨H3 小时前
数据结构与算法的通俗指南
数据结构·算法
2301_764441333 小时前
用动力学系统(微分方程)为 Kernberg 的客体关系单元提供数学化的操作定义,把“自体—客体“这对心理结构建模成一个二维耦合系统
数据结构·python·算法·数学建模
林泽毅3 小时前
PyTRIO快速入门(二):Datum构建
人工智能·算法·产品
keep intensify3 小时前
最长有效括号
算法·leetcode·动态规划
CoderYanger4 小时前
A.每日一题:1979. 找出数组的最大公约数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
猫头虎4 小时前
什么是ZCode for GLM-5.2?
开发语言·人工智能·python·科技·算法·ai编程·ai写作