【LeetCode Easy】007 Reverse Integer

Easy 007 Reverse Integer

Description:

Given a 32-bit signed integer, reverse digits of an integer.
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−2^31,  2^31 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
==Example==
123→321 -123→-321 120→21

My Solution:

  1. 第一时间想到这是经典的取模取余运算,可是写的过程当中遇到了不少问题QAQ(这么简单一题git

    • 基础作法:取一个整数的最后一位数字只要把这个整数 % 10就能够,要取除最后一位数字以外的其它数字只要 / 10
    • int是没有长度函数的,须要转化成String才能使用长度函数
    • 用这个方法最大的难点在于用int类型时处理溢出问题,本来没有溢出的数字在进行翻转时颇有可能溢出,最合适的方法是在处理过程当中进行预判函数

      • 假设翻转过程的中间值用res来保存,每次取下来的那个数字用pop来保存,overflow = 2147483646,underFlow = -2147483647
      • 已知当res * 10 + pop 会引发溢出时,res一定是 ≥ (max / 10)或 ≤ (min / 10)的,其中相等时对pop有要求
      • 根据上述条件在翻转时进行溢出预判
    • Java代码:this

      public static int reverse(int x) {
            int overFlow = (int)Math.pow(2,31) -1;     //overFlow = 2147483646
            int underFlow = 0 - (int)Math.pow(2,31);   //underFlow = -2147483647
            int pop = 0;
            int result = 0;
      
            while(x != 0){
                pop = x % 10;
                if((result>overFlow/10) || (result==overFlow/10 && pop>7))
                    return 0;
                if((result<underFlow/10) || (result==underFlow/10 && pop<-8))
                    return 0;
                result = result * 10 + pop;   //★
                x = x/10;
            }
      
            return result;
        }

Fast Solution:

  1. 题目中要求的溢出条件实际上是针对int型数据的,这题用Java来写的话其实能够用long类型code

    • Java代码:ip

      public int reverse(int x) {
           long res = 0;   //此处用了long
           while (x != 0) {
               res = res * 10 + x % 10;
               x = x / 10;
           }
           return (int)res == res ? (int)res : 0;   
       }
相关文章
相关标签/搜索