首页 > 技术文章 > 整数反转 -- 算法

saoge 2021-02-05 14:15 原文

一. 需求:整数反转

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

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

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

图解:

[方法二的图解]
在这里插入图片描述

示例 :

输入:x = 123
输出:321
示例 2:

输入:x = -123
输出:-321
示例 3:

输入:x = 120
输出:21
示例 4:

输入:x = 0
输出:0

提示:

-231 <= x <= 231 - 1

二.代码

思路写在注释中
在这里插入图片描述

方法1

 1 /**
 2      * 整数反转
 3      * @param x
 4      * @return
 5      */
 6     private int getIntReversalOne(int x)
 7     {
 8         // 存倒叙的字符
 9         String str = "";
10 
11         // 判断是否是负数
12         if(x < 0){
13             // 绝对值
14             x = Math.abs(x);
15             // 提前让字符变负
16             str = "-";
17         }
18         // 将int数据转为string后再转为字符数组
19         char[] chars = (x + "").toCharArray();
20         // 从尾部遍历到头部,达到倒叙的效果
21         for (int i = chars.length -1; i >= 0; i--)
22         {
23             // 将字符拼接到字符串中
24             str += chars[i];
25 
26         }
27         try
28         {
29             // 将字符串强制为Int并返回
30             return Integer.parseInt(str);
31         }
32         catch (Exception e)
33         {
34             e.printStackTrace();
35             return 0;
36         }
37     }
作者:王子威

 

方法2

 1  private int getIntReversalTwo(int x)
 2     {
 3         // 存储倒叙的值
 4         long reversalNum = 0;
 5         // 只要不为 0 都可以继续下去
 6         while (x != 0)
 7         {
 8             /**
 9              *  123为例
10              *  reversalNum = 0 * 10 + 123 % 10  reversalNum = 3
11              *  reversalNum = 3 * 10 + 12 % 10   reversalNum = 32
12              *  reversalNum = 32 * 10 + 1 % 10   reversalNum = 321
13              */
14             reversalNum = reversalNum * 10 + x % 10;
15             /**
16              * 123为例,因为是整数,小数点自动忽略
17              * x = 123
18              * x = 12
19              * x = 1
20              */
21             x /= 10;
22         }
23         // 判断reversalNum是否在int范围内,超出返回0 ,否则返回强转reversalNum为int的值
24         return reversalNum > Integer.MAX_VALUE || reversalNum < Integer.MIN_VALUE ? 0 : (int) reversalNum;
25     }
26 作者:王子威

 

总结

  1. 学习了整数反转
  2. 算法兴趣+1
  3. 要明白了规律的重要性
  4. 欠缺:算法的思路感觉还是在面向过程的层面,要加油!!!

推荐阅读