• 7.Reverse Integer


    题目链接:https://leetcode.com/problems/reverse-integer/description/

    题目大意:与190题类似,只是这题是反转十进制数值,在有符号整型范围内,如果得到的结果超过了整型范围,即溢出,则返回0。

    法一:暴力解,将整型数转为字符串,再将字符串转为字符数组,将字符数组反转,再将字符数组转为字符串,最后按照正负,将字符串转为int返回。代码如下(耗时50ms):

     1     public int reverse(int x) {
     2         boolean mark = false;
     3         if(x < 0) {
     4             mark = true;
     5             x = -x;
     6         }
     7         //转为字符串做
     8         String s = Integer.toString(x);
     9         char[] rs = s.toCharArray();
    10         int length = rs.length - 1;
    11         //字符串反转
    12         for(int i = 0; i < length; i++, length--) {
    13             rs[i] ^= rs[length];
    14             rs[length] ^= rs[i];
    15             rs[i] ^= rs[length];
    16         }
    17         s = String.copyValueOf(rs);
    18         //将字符串转为数值
    19         if(mark == true) {//负数
    20             if(s.length() < 10) {
    21                 return -Integer.parseInt(s);
    22             }
    23             else if(s.length() > 10) {
    24                 return 0;
    25             }
    26             else {
    27                 //x.compareTo(y),如果x<y,返回数值<0;如果x>y,返回数值>0
    28                 if("2147483648".compareTo(s) < 0) {
    29                     return 0;
    30                 }
    31                 else {
    32                     return -Integer.parseInt(s);
    33                 }
    34             }
    35             
    36         }
    37         else {//正数
    38             if(s.length() < 10) {
    39                 return Integer.parseInt(s);
    40             }
    41             else if(s.length() > 10) {
    42                 return 0;
    43             }
    44             else {System.out.println(s);
    45                 if("2147483647".compareTo(s) < 0) {
    46                     return 0;
    47                 }
    48                 else {
    49                     return Integer.parseInt(s);
    50                 }
    51             }
    52         }
    53     }
    View Code

    法二(借鉴):用转换进制的办法,从最低位开始赋值转换。注意一下中间判断一下溢出即可。代码如下(耗时41ms):

     1     public int reverse(int x) {
     2         int res = 0;
     3         while(x != 0) {
     4             int tmp = x % 10;
     5             if((res < Integer.MIN_VALUE / 10) || (res > Integer.MAX_VALUE / 10)) {//判断溢出
     6                 return 0;
     7             }
     8             res = res * 10 + tmp;
     9             x /= 10;
    10         }
    11         return res;
    12     }
    View Code
  • 相关阅读:
    mysql的sql执行计划
    JMX
    用 Cobertura 测量测试覆盖率
    javap反汇编的使用
    Java ASM 技术简介
    基于Java Instrument的Agent实现
    浮动的同级盒子顶对齐
    子绝父相布局
    相对定位,绝对定位和固定定位
    嵌套的定位盒子如何居中?
  • 原文地址:https://www.cnblogs.com/cing/p/8040113.html
Copyright © 2020-2023  润新知