题目表述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
示例
输入:x = 123
输出:321
输入:x = -123
输出:-321
先上代码
class Solution {
public static int reverse(int x) {
String s = String.valueOf(x);
if(s.charAt(0) == '-'){
String newStr = new StringBuffer(s.substring(1,s.length())).reverse().toString();
if(newStr.charAt(0) =='0'){
newStr = newStr.substring(1,newStr.length());
newStr= "-"+newStr;
long result = Long.parseLong((newStr));
if(result<-2147483648||result>2147483647) return 0;
else return (int)result;
}else {
newStr= "-"+newStr;
long result = Long.parseLong((newStr));
if(result<-2147483648||result>2147483647) return 0;
else return (int)result;
}
}else {
if(s.equals("0")){
return Integer.parseInt(s);
}else {
String newStr = new StringBuffer(s.substring(0,s.length())).reverse().toString();
System.out.println(newStr);
if(newStr.charAt(0) =='0'){
newStr = newStr.substring(1,newStr.length());
long result = Long.parseLong((newStr));
if(result<-2147483648||result>2147483647) return 0;
else return (int)result;
}else {
long result = Long.parseLong((newStr));
if(result<-2147483648||result>2147483647) return 0;
else return (int)result;
}
}
}
}
}
分析:
将有符号的数字进行反转,首先考虑特殊情况,以负号开头的数字,反转只需对负号之后的数字进行反转,反转操作使用stringbuffer里面的reverse函数直接进行反转操作,但是需要注意的是反转之后开始位置的数字可能变为0,所以需要对0进行去除,只需截取下一位之后的字符即可。
另外当数字只是0的时候或者只有一位的时候直接返回即可。正数的情况同上面负数的反转操作,还是要考虑反转之后首位是否为0。
最后java int 类整数的最大值是 2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647也可以用 Integer.MAX_VALUE 表示它,即 int value = Integer.MAX_VALUE;在接收新的字符转成数值类型时使用long去接收,这样也为了放置超过范围,当超过这个范围直接返回0即可。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer/