【发布时间】:2019-01-08 22:58:21
【问题描述】:
问题陈述:给定一个 32 位有符号整数,反转整数的数字。
示例 1:
输入:123 输出:321 示例 2:
输入:-123 输出:-321
我的解决方案:
class Solution7{
public int reverse(int x) {
if(x>Integer.MAX_VALUE || x<Integer.MIN_VALUE) {
return 0;
}
StringBuilder S_rev = new StringBuilder();
String S_r_v=S_rev.append(Math.abs(x)).reverse().toString();//.toString() String builder to String
double reverse_no=Double.parseDouble(S_r_v);
if (x < 0) {
return -(int)reverse_no;
}
return (int)reverse_no;
}
}
我的解决方案适用于大多数测试用例。但它不能通过一个测试用例,我得到一个错误
Error:第 10 行:java.lang.NumberFormatException:对于输入字符串:“8463847412-”
如果有人知道这是什么类型的错误,请讨论。
提前谢谢你。
【问题讨论】:
-
对您有帮助的两个问题:异常消息是否表明输入字符串是数字?测试用例测试与其他测试用例有何不同?
-
您需要从反转的字符串中删除 - 。另一种解决方案是您自己在字符串生成器中进行字符反转,方法是交换所有数字但保留任何 - 原位。然后只需将结果解析回来,它将保留任何符号
-
检查
if(x>Integer.MAX_VALUE || x<Integer.MIN_VALUE)没有意义。根据定义,这是不可能的。 -
你不能反转任何 int 并且必须得到一个有效的 int。有些会超出范围。
-
这是 Math.abs 如何处理 Integer.MIN_VALUE 的问题。看我的回答。
标签: java string stringbuilder