將一個整數中的數字進行顛倒,當顛倒后的整數溢出時,返回 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這種請跨國,以后思路還需要嚴謹一些