Leetcode刷题:整数反转

464 阅读2分钟

这是我参与新手入门的第1篇文章

一、题目描述


整数反转

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

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

假设环境不允许存储 64 位整数(有符号或无符号)。
  • 从简单到困难、一步一个脚印、加油!

二、思路分析


  • 看下示例,理解题目,理清思路,再写代码来实现!

  • 示例 1:

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

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

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

    输入:x = 0
    输出:0
    
  • 提示:

image.png

  • 思路分析:
    • 注意这个提示告诉了我们反转后的值应该在 -2147483648 至 2147483647之间

    • 先判断正负数

      • 如果数是0 返回0
      • 如果是正数,判断是否溢出,溢出返回0,反之进行计算
      • 如果是负数,判断是否溢出,溢出返回0,反之进行计算
    • 取余之后如果大于7,也属于越界,返回0

    • 反之,进行正常的计算返回

三、AC 代码


  • 根据思路解题

    public static int reverse(int x) {
          //-2147483648 至 2147483647
          int res = 0;
          int digit;
    
          while(x != 0){
              if(res > 214748364){
                  return 0;
              }
              if(res == 214748364){
                  res = res * 10;
                  digit = x % 10;
                  if(digit > 7){
                      return 0;
                  }
                  else{
                      res = res + digit;
                      return res;
                  }
              }
              //负数
              if(res < -214748364){
                  return 0;
              }
              if(res == -214748364){
                  res = res * 10;
                  digit = x % 10;
                  if(digit < -8){
                      return 0;
                  }
                  else{
                      res = res + digit;
                      return res;
                  }
              }
              res = res * 10;
              digit = x % 10;
              res = res + digit;
              x = x / 10;
          }
          return res;
      }
    

image.png

四、总结

  • 哇靠,写出来这题我还感觉蛮简单的,然后看了下其他人的题解。。瞬间破防,我这方法实在太蠢了。

  • 优质题解推荐