如何解决java反向整数leetcode问题

时间:2021-07-15 15:04:32

标签: java

尝试了所有通过测试用例的方法,但仍然只显示一个错误。我不知道如何纠正错误。

输入: 1534236469
实际输出: 1056389759
预期输出: 0

我不知道为什么我的代码没有给出输出 0。

class Solution
{
    public static int reverse(int x)
    {
        boolean flag = false;
        if (x < 0)
        {
            x = 0 - x;
            flag = true;
        }
        int res = 0;
        int p = x;
        while (p > 0)
        {
            int mod = p % 10;
            p = p / 10;
            res = res * 10 + mod;
        }
        if (res > Integer.MAX_VALUE)
        {
            return 0;
        }
        if (flag)
        {
            res = 0 - res;
        }
        return res;
    }

    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int revinteger = reverse(x);
        System.out.println(revinteger);
    }
}

4 个答案:

答案 0 :(得分:2)

语句 res > Integer.MAX_VALUE 永远不会为真,因为 resint 数据类型。而且 int 永远不能大于 Integer.MAX_VALUE(MAX_VALUE 本身就是我们可以存储为 int 的最大值)。
使用 long 数据类型来反转数字,最后返回结果的整数值。

答案 1 :(得分:0)

if (res > Integer.MAX_VALUE)

如果它是整数的最大可能值,它怎么会比它大?您必须以另一种方式检测它。

一种方法是使用 long 数据类型而不是 int。然后,它可以变得比 Integer.MAX_VALUE 大,并且该捕获将起作用。

否则,您可能会找到另一种方法来抓住那个案例。

答案 2 :(得分:0)

因为基于长的操作相对较慢,我只会使用 long 来做最后的检查,以确定是否即将发生溢出。

很明显,如果除最后一位以外的所有数字都颠倒了,则没有 int 会导致溢出。所以在返回值之前处理循环外的最后一位数字。 min 的边界情况首先被消除,以方便后续处理。现在只有 Integer.MAX_VALUE 与正数和负数有关。

public static int reverse(int v) {
    if (v == Integer.MIN_VALUE) {
        return 0; // guaranteed overflow if reversed.
    }
    int rev = 0; 
    long ovflLimit = Integer.MAX_VALUE;
    int sign = v < 0 ? -1 : 1;
    v *=sign;
    
    while (v > 9) {
        int digit = v % 10;
        rev =  rev * 10 + digit;
        v/=10;
    }
    long ovfl = (long)(rev)*10+v;
    return ovfl > ovflLimit ? 0 : (int)(ovfl)*sign;
}

答案 3 :(得分:0)

这个问题可以通过多种方式解决,但如果我们坚持使用 Java 和您的解决方案,那么正如一些答案中已经指出的那样,通过使用 int 条件 {{1 }} 永远不会是 if(res > Integer.MAX_VALUE)。 因此,您不会得到预期的输出为 0。

您可以通过在 true 中转换值并检查它是否超出 long 限制,在反转最后一位数字之前进行检查。正如 WJS 所建议的那样。

如果你想坚持你的解决方案而不做太多改变,下面是相同的工作代码。

int