这道题麻烦的地方在判断反转后的数字是否超出int的范围,而不能在转换完后判断是否超出范围(当时数据已经越界),所以可以在最后一步前进行判断s<Integer.MIN_VALUE / 10 || s>Integer.MAX_VALUE / 10。
import java.util.*;
public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int reverse (int x) {
// write code here
boolean flag = false;
int s = 0;
if(x<0){
flag = true;
x = -x;
}
String str = String.valueOf(x);
int[] arr = new int[str.length()];
int[] res = new int[str.length()];
for(int i = 0;i<str.length();i++){
arr[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
}
for(int j = 0;j<str.length();j++){
res[j] = arr[str.length()-j-1];
}
for(int k = 0;k<str.length();k++){
s = s*10+res[k];
if(s<Integer.MIN_VALUE / 10 || s>Integer.MAX_VALUE / 10)// Integer.MIN_VALUE / 10 <= sum <= Integer.MAX_VALUE / 10时,sum没有超过32位有符号数字的范围
return 0;
}
if(flag){
s=-s;
}
return s;
}
}