7. 整数反转

1. 题目

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。

2. 示例

示例1:

输入:x = 123
输出:321

示例2:

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

示例3:

输入:x = 120
输出:21

提示:

-231 <= x <= 231 - 1

3. 题解

 第一步:约束条件

观察本题的约束条件:32位的有符号整数,不能用64位的。

第二部:思考

首先想到的是字符串,然后数学计算。

第三部:字符串

1. 转字符串

2. 遍历字符串,判断第一个字符是否是符号位?根据每一位字符求和。

3. 加入约束条件,我想到的约束方式有:

if(c != 0 && sum % c != cur) return 0;

其中c是当前要放到第一位的数,sum是总和,cur是上一次计算的sum。

4. 实现

 1 public class Reverse7 {
 2     public int reverse(int x) {
 3         int flag = 1;
 4         String s = String.valueOf(x);
 5         int sum = 0, temp = 1;
 6         for(int i = 0; i < s.length(); i++) {
 7             if(i == 0 && s.charAt(i) == '-') {
 8                 flag = -1;
 9             } else {
10                 int cur = sum;
11                 int c = Integer.parseInt(String.valueOf(s.charAt(i))) * temp;
12                 sum += c;
13                 temp *= 10;
14                 // if(cur != 0 && sum % 10 != cur % 10) return 0;
15 
16                 if(c != 0 && sum % c != cur) return 0;
17             }
18         }
19         return flag * sum;
20     }
21 
22     public static void main(String[] args) {
23         // int x = 1563847412;
24         int x = -2147483412;
25         System.out.println(new Reverse7().reverse(x));
26     }
27 }

5. 总结

  努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

  如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

原文地址:https://www.cnblogs.com/haifwu/p/14939983.html