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

 

posted on 2017-12-14 21:37  二十年后20  阅读(179)  评论(0编辑  收藏  举报

导航