leetcode练习第四天 整数反转

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转

示例leetcode练习第四天 整数反转_第1张图片

本题就是比较简单的数学题
我的思路首先是想倒序是在java字符串中有工具类的
所以第一步就出来了 先将数字转化为字符串
调用Integer.toString()方法
第二步就是倒叙
调用StringBuffer()中的reverse()方法对输入输出流操作
第三步就是把字符串在转化为整数
代码

class Solution {
    public int reverse(int x) {
        String a=" ",b=" ";
        long c=0;
        if(x==0)
        {
            return 0;
        }
        else{
     try {
      if(x>0) {
          a=Integer.toString(x);
       b=new StringBuffer(a).reverse().toString();
       c=Long.parseLong(b);
      }
      else 
      {
          a=Integer.toString(-x);
       b=new StringBuffer(a).reverse().toString();
       c=(-Long.parseLong(b));
      }
     }catch(Exception e) {
      e.printStackTrace();
     }
            if(cInteger.MAX_VALUE){
                return 0;
            }else{
                return (int)c;
            }
      }
    }
}

结果
leetcode练习第四天 整数反转_第2张图片

可以看出用时还是很长的
我们尝试去优化一下代码
我们发现该方法主要时间用在字符串的转化上
那么我们是不是可以用出入栈的方法直接对整数进行处理

参考官网方法进行修改

class Solution {
    public int reverse(int x) {
        int b = 0;
        while (x != 0) {
            int c = x % 10;
            x /= 10;
            if (b > Integer.MAX_VALUE/10 || (b == Integer.MAX_VALUE / 10 && c > 7)) return 0;
            if (b < Integer.MIN_VALUE/10 || (b == Integer.MIN_VALUE / 10 && c < -8)) return 0;
            b = b * 10 + c;
        }
        return b;
    }
}

结果leetcode练习第四天 整数反转_第3张图片
提升还是很显著的

我发现这个算法中对Int是否溢出的边界处理
就想能不能把Int直接定义为long型处理更好
所以有了下面的尝试

class Solution {
    public int reverse(int x) {
      long c = 0;
        while (x != 0) {
            c = c * 10 + x % 10;
            x /= 10;
        }
        if (c > Integer.MAX_VALUE || c < Integer.MIN_VALUE)
            return 0;
        return (int) c;    }
}

结果
leetcode练习第四天 整数反转_第4张图片
提高了时间效率 不过增加了空间复杂度
总体来说本题还是很值得一做

你可能感兴趣的:(java)