7.Reverse Integer

題目連接:https://leetcode.com/problems/reverse-integer/description/數組

題目大意:與190題相似,只是這題是反轉十進制數值,在有符號整型範圍內,若是獲得的結果超過了整型範圍,即溢出,則返回0。ide

法一:暴力解,將整型數轉爲字符串,再將字符串轉爲字符數組,將字符數組反轉,再將字符數組轉爲字符串,最後按照正負,將字符串轉爲int返回。代碼以下(耗時50ms):spa

 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):code

 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
相關文章
相關標籤/搜索