将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 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这种请跨国,以后思路还需要严谨一些