问题语句是一种基本的-如果输入是32位有符号整数输出反转整数,否则输出0。
这是我想出来的代码
public class Solution {
public int reverse(int A) {
if(A>=2143483647 || A<-2143483647)
return 0;
if(A>=0)
return Integer.parseInt((new StringBuilder(String.valueOf(A))).reverse().toString());
else
return -1*Integer.parseInt((new StringBuilder(String.valueOf(-1*A))).reverse().toString());
}
}
该解决方案不被接受。问题出在我的代码还是测试用例中?
发布于 2019-06-10 12:56:02
假设输入是int32,这里是一种可能的方法,包括检查溢出。
public class Solution {
public int reverse(int A) {
//if(A < Integer.MIN_VALUE || A > Integer.MAX_VALUE) return 0;
boolean neg = A < 0;
A = Math.abs(A);
long ret = 0;
while(A != 0){
ret = ret*10 + A%10;
A = A/10;
}
if(ret > Integer.MAX_VALUE) return 0;
return neg ? -(int)ret : (int)ret;
}
}
如果输入较大,请注意将int更改为long。
发布于 2019-06-11 03:16:10
accepted answer很接近,但遗漏了一些边缘情况。这是一个基于公认答案的答案,但希望能正确处理所有情况。
public static int reverse(int A) {
long aLong = Math.abs((long)A);
long ret = 0;
while (aLong != 0) {
ret = ret * 10 + aLong % 10;
aLong = aLong / 10;
}
if (A < 0) {
ret = -ret;
}
if ((ret < Integer.MIN_VALUE) || (ret > Integer.MAX_VALUE)) {
return 0;
} else {
return (int) ret;
}
发布于 2019-06-10 12:50:11
您可以先尝试反转为一个长参数(这可以保证它不会溢出),然后再进行检查。
public int reverse(int A) {
long reversed;
if(A>=0)
reversed= reverseString(A);
else
reversed -1* reverseString(-A) ;
//we do the checking only after we have done the reverse.
if(reversed > Integer.Max_VALUE || reversed < Integer.MIN_VALUE)
return 0;
else
return (int) reversed; //we do a down cast here.
}
public long reverseString(int A){
StringBuilder sb = new StringBuilder(""+A).reverse();
String s = sb.reverse().toString();
return Long.parseLong(s);
}
https://stackoverflow.com/questions/56520521
复制相似问题