題目連接: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 }
法二(借鑑):用轉換進制的辦法,從最低位開始賦值轉換。注意一下中間判斷一下溢出便可。代碼以下(耗時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 }