当前位置: 代码迷 >> J2SE >> leetcode第七题Reverse Integer解决办法
  详细解决方案

leetcode第七题Reverse Integer解决办法

热度:47   发布时间:2016-04-23 19:54:49.0
leetcode第七题Reverse Integer
题目要求是把输入的整形数颠倒位置,如123变成321,-123变成-321
这是我的处理的函数
public int reverse(int x) {
char num;
        String s = String.valueOf(x);
        char[] c = s.toCharArray();
        char[] c1 = String.valueOf(Integer.MIN_VALUE).toCharArray();
        char[] c2 = String.valueOf(Integer.MAX_VALUE).toCharArray();
        if(c[0]=='-'){
         c[0] = '-';
         if(c.length>11)return 0;
         for(int i=1,j=c.length-1;i<=c.length-1;i++){
         num = c[i];
         c[i] = c[j];
         c[j] = num;
         j--;
         if(j-i<=1)break;
         }
         if(c.length==11){
         for(int i=1;i<c.length-1;i++){
         if(c[i]<c1[i])break;
         else return 0;
         }
         }
        }
        else{
         if(c.length>10)return 0;
         for(int i=0,j=c.length-1;i<=c.length-1;i++){
         num = c[i];
         c[i] = c[j];
         c[j] = num;
         j--;
         if(j-i<=1)break;
         }
         if(c.length==10){
         for(int i=0;i<c.length-1;i++){
         if(c[i]>c2[i])break;
         else return 0;
         }
         }
        }
        int x1 = Integer.parseInt(String.valueOf(c));
        return x1;
    }
出现错误Runtime Error Message: Line 41: java.lang.NumberFormatException: For input string: "9646324351"
Last executed input: 1534236469

因为传入的是int类型的数,所以9646324351比int类型最大的数要大,怎么处理这个问题
------解决思路----------------------
9,646,324,351是整数,但不是整形,整形是计算机术语,是有范围的,java中是-2^31~2^31-1(2,147,483,647)
------解决思路----------------------
两种解决方案:
1.用大一点的数据类型:Long
2.用字符传解决

方案2:如下:
public String reverse(String str) {
String strResult = "";
if(str!=null&&!str.trim().equals("")){
char[] arrayCh = str.toCharArray();
for(int i=arrayCh.length-1;i>0;i--){
strResult = strResult + arrayCh[i];
}
if(arrayCh[0] =='-'){
strResult = "-"+ strResult;
}else{
strResult = strResult + arrayCh[0];
}
}
return strResult;
}
------解决思路----------------------
试试,应该是可以的了,要是不存在负数,就更加简单了,只要一行代码就解决了



/**
 * Created by puruidong on 2015/4/2.
 */
public class TestDemo {
    public static void main(String[] args) {
        System.out.println(revseStr(-123456));
    }
    private static String revseStr(Integer s){
        //反转数字.
        if(s<0){
            String rs = s.toString().substring(1) ;
            return new StringBuffer(rs).reverse().insert(0,"-").toString();
        }
        return new StringBuffer(s.toString()).reverse().toString();
    }
}

------解决思路----------------------
> 因为传入的是int类型的数,所以9646324351比int类型最大的数要大,怎么处理这个问题

程序里加异常处理,catch到异常了,打印错误信息是一种解决办法
  相关解决方案