LeetCode第7题:整数反转

103 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情

题目描述

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

思路

整数反转题目,只要搞清楚了思路,就很好做,如果把数传进去,进行循环,每次循环都取当前数的尾数,然后将得到的数进行拼接,也就是每次都将之前的数进位再加上当前数。依次循环,就可以完成这个题目,但是在每次进行计算之前,需要判断一些是否数值溢出了,溢出了直接返回0,代表该数不能够进行反转。思路其实还是很简单,就是取最后一个尾数,然后将尾数进行进位,再加上当前数。

代码

public static int reverse(int x) {
  int res = 0;
  while (x != 0) {
    //每次取末尾数字
    int tmp = x % 10;
    //判断是否 大于 最大32位整数
    if (res > 214748364 || (res == 214748364 && tmp > 7)) {
      return 0;
    }
    //判断是否 小于 最小32位整数
    if (res < -214748364 || (res == -214748364 && tmp < -8)) {
      return 0;
    }
    res = res * 10 + tmp;
    x /= 10;
  }
  return res;
}
public static void main(String[] args) {
  int i=1000;
  System.out.println(reverse(i));
  int i1=4523;
  System.out.println(reverse(i1));
  int i3=63546;
  System.out.println(reverse(i3));
  int i4=-867;
  System.out.println(reverse(i4));
}

运行结果
1
3254
64536
-768

总结

整数反转,思路其实不算复杂,对算术运算有点基础,然后仔细想一想,就可以得到大概的思路,得到思路再进行代码的编写,优化,再写出自己的题解,差不多这个题目就拿下了。坑点就在于整数溢出的计算,需要多考虑一下,我暂时是自己没想好,复用了网上大佬们的计算来直接用的