Java 反转整数

将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。

给定 x = 123,返回 321

给定 x = -123,返回 -321

 

思路:字符串处理,需要考虑一下情况    12300->00321 这时需要处理掉前面的0, 翻转后大于2的32次方(整数的最大值,返回0)

代码如下,时间复杂度O(n),空间复杂度O(n),如有更好的方式,请留言

 

 1   public int reverseInteger(int n) {
 2         String flag=n>=0?"":"-";
 3         char[] num = (Math.abs(n)+"").toCharArray();
 4         //int 最大值是2的32次方  21亿 大于10位置就不用考虑了
 5         if(num.length>10){
 6             return 0;
 7         }
 8 
 9 
10         //翻转char数组
11         int start=0;
12         int end = num.length-1;
13         while(start+1<=end){
14             char temp = num[start];
15             num[start]=num[end];
16             num[end]=temp;
17             start++;
18             end--;
19         }
20 
21         //处理0的情况   12300->00321 
22         String reverseStr = new String(num);
23         if(reverseStr.charAt(0)=='0'){
24             int k=0;
25             while(k<reverseStr.length()-1&&reverseStr.charAt(k)==0){
26                 k++;
27             }
28             reverseStr=reverseStr.substring(k);
29         }
30         
31        //处理大于2的32 并且还为10位的情况,int最大2147483647
32         Long overNum= Long.valueOf(reverseStr);
33         if(overNum>Integer.MAX_VALUE){
34             return 0;
35         }
36         
37        //拼接前边的标志位
38         reverseStr=flag+reverseStr;
39         return Integer.valueOf(reverseStr);
40     }

 心得体会,这题目并不难,但是翻转后的特殊情况需要考虑,最开始没有想到处理0这种请跨国,以后思路还需要严谨一些

posted on 2017-08-25 10:16  李乐已存在  阅读(2116)  评论(0编辑  收藏  举报

AmazingCounters.com