// 解法一:暴力,直接StringBuffer.reverse倒转classSolution{publicstaticintreverse(int x){try{// int -> String -> StringBuffer -> 再调用StringBuffer.reverse()方法
String symbol ="";if(x <0) symbol ="-";
StringBuffer sb =newStringBuffer(String.valueOf(Math.abs(x)));
StringBuffer revStr = sb.reverse();long revInt = Long.valueOf(symbol + revStr.toString());
Double min =-Math.pow(2,31);
Double max = Math.pow(2,31)-1;if(min <= revInt && revInt <= max){return(int) revInt;}return0;}catch(Exception e){return0;}}}
不添加trycatch报错如下 这个测试用例过不了:
9646324351 NumberFormatException报错。String->long出错?
long的范围在-2^63~2^63-1,不确定报错是哪里报出来的?
java.lang.NumberFormatException: For input string:"9646324351"
at line 68, java.base/java.lang.NumberFormatException.forInputString
at line 658, java.base/java.lang.Integer.parseInt
at line 776, java.base/java.lang.Integer.parseInt
at __Deserializer__.toInteger(Unknown Source)
at line 82, __Driver__.main
// 解法二:用 % / 将x的个、十、百、千、万...获取到后重新拼成新的返回值retclassSolution{/**
* 输入范围[−2^31, 2^31 − 1]
* 先将x取正(排查−2^31,将−2^31取正已经超过int范围), 然后通过 % /获取余数与整数部分。
*/publicstaticintreverse(int x){if(x == Integer.MIN_VALUE)return0;int sign = x >0?1:-1;
x *= sign;// 将x取正long ret =0;// 设置返回值 设置为long 因为翻转后可能会超过int范围while(x >0){
ret = ret *10+ x %10;
x = x /10;}if(Integer.MIN_VALUE > ret || ret > Integer.MAX_VALUE)return0;return(int) ret * sign;}}