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

时间:2016-09-27 10:59:04

标签: java

以下是a problem on LeetCode的快照:

enter image description here

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

public int reverse(int x) {
}

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

enter image description here

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

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

这是我的代码,但代码几乎无关紧要,因为返回类型(int)由问题修复(所以“整数”它们实际上是int,而不是{{ 1}}):

long

4 个答案:

答案 0 :(得分:1)

您应该使用Long.parseLong()。整数的数字太大了。整数的最大值是2 ^ 31-1 = 2147483647。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我按照方法完成了

    int result=0;
    try{
        result = Integer.parseInt(stringBuilder.toString());
        return result;
    }catch(Exception e){
        return 0;
    }

答案 3 :(得分:0)

我已经成功提交了代码,但我仍然想在运行速度和空间利用率方面进行优化。 能否请您分享您对此的看法。

class Solution {
    public int reverse(int x) {
        String reverse;
        if(x==0 && x > Integer.MAX_VALUE && x < Integer.MIN_VALUE){return 0;}
        if(x<0){
            x = Math.abs(x);
            String temp = String.valueOf(x);
            int len = temp.length();
            reverse = "-";
            for(int i=len-1;i>=0;i--){
                reverse = reverse + temp.charAt(i);
            } 
        }else{
            String temp = String.valueOf(x);
            int len = temp.length();
            reverse = "";
            for(int i=len-1;i>=0;i--){
                reverse = reverse + temp.charAt(i);
            } 
        } 
        try{
        int rev = Integer.parseInt(reverse);
        return rev;
        }catch(Exception e){return 0;}
    }
}

运行时间:10 毫秒,比 Java 在线提交的反向整数快 8.10%。 内存使用:37 MB,不到 Java 在线提交的反向整数的 13.88%。