NumberFormatException 对于输入字符串:“9646324351”

Fou*_*rth 0 java

这是LeetCode 上的一个问题的快照:

在此输入图像描述

对于这个问题,他们提供了你必须填写的框架代码:

public int reverse(int x) {
}
Run Code Online (Sandbox Code Playgroud)

在测试解决方案时,它似乎提供了不合理的输入,并且不允许我提交我的解决方案。错误是:

在此输入图像描述

请注意,输入是1534236469. 这适合作为int输入但相反的版本,自然不适合,因为Java 中9646324351an 的最大正值是。int2147483647

这只是LeetCode测试中的一个错误吗?或者是否有一些我无法想象的技巧可以神奇地让我返回9646324351一个明显超出范围的值,从reverse作为一个返回int

这是我的代码,但代码几乎无关紧要,因为返回类型 ( int) 是由问题固定的(因此“整数”的真正意思是int,而不是long):

public int reverse(int x) {
    String intString;
    StringBuilder sb = new StringBuilder();
    if(x < 0){
        sb.append("-");
        x = x * -1;
    }
    intString = Integer.toString(x);
    for(int i = intString.length() - 1; i >= 0; i--){
        sb.append(intString.charAt(i));
    }
    String resultString = sb.toString();
    int result = Integer.parseInt(resultString);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

这是 LeetCode 测试中的一个错误。根本无法将他们要求的返回值存储在 中int,因此无法根据reverse提供的框架代码返回它。

也许测试用例是在 的整个范围内随机生成的int,没有考虑到某些输入的reverse值可能会超出范围。int

事实证明,0如果反转的数字超出范围,他们希望您返回。他们并不是在问题的任何地方都懒得提及这一点。

  • 我终于弄清楚了。显然,该测试用例是有意引入的,您应该测试 32 位 int 溢出,并在发生时返回 0。您可以为了其他可能有用的人而编辑答案。 (2认同)