当前位置: 首页 > 知识库问答 >
问题:

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

郜昊苍
2023-03-14

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

输入: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);
    }
}

共有3个答案

子车才捷
2023-03-14

这个问题可以通过各种方式解决,但是如果我们坚持使用Java和您的解决方案,那么正如一些答案中已经指出的那样,通过使用int条件if(res

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

如果你想坚持你的解决方案没有太大的变化,下面是相同的工作代码。

class Solution {

    public static int reverse(int x) {
        boolean flag = false;
        long input = x;
        if (input < 0) {
            input = 0 - input;
            flag = true;
        }

        long res = 0;
        long p = input;

        while (p > 0) {
            long mod = p % 10;
            p = p / 10;
            res = res * 10 + mod;
        }

        if (res > Integer.MAX_VALUE) {
            return 0;
        }

        if (flag) {
            res = 0 - res;
        }

        return (int) 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);
    }
}

苏鸿羽
2023-03-14

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

显然,如果除最后一个数字外的所有数字都颠倒了,则没有任何int会导致溢出。因此,在返回值之前,先处理循环外的最后一个数字。首先消除min的边界情况,以便于后续处理。现在只有整数。最大值对于正数和负数都很重要。

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;
}
墨财
2023-03-14

声明res

 类似资料:
  • 我在试着解7。反向整数在leetcodehttps://leetcode.com/problems/reverse-integer/. 给定一个有符号的32位整数x,返回x并反转其数字。如果反转x导致值超出有符号32位整数范围[-2^31,2^31-1],则返回0。 例1: 我对上述问题的解决方案是 我弄错了4个测试用例。其中之一是: 示例

  • 我对编码和练习leetcode问题还不熟悉。整数反向问题涉及溢出。 我已经搜索并讨论了关于如何处理溢出的大部分内容。有人能解释一下溢出的原因吗?

  • 问题是:整数的倒数。 示例1:x=123,返回321 例2:x=-123,返回-321 你注意到反整数可能会溢出吗?假设输入是32位整数,则100000003溢出的相反值。你应该如何处理此类案件? 抛出异常?很好,但是如果抛出异常不是一个选项呢?然后必须重新设计函数(即,添加一个额外的参数)。 从我搜索的网站的解决方案是: 但是,当时,控制台会打印,而不是。因此,如果我们不能使用异常,这个解决方案

  • 我的反向整数代码在LeetCode上不被接受。 我检查了我的程序是否可以返回正确答案。 对于一个输入的情况,我的程序返回正确的输出。 但是有错误,我的代码不被接受。什么是问题,我应该如何修复我当前的代码?

  • 本文向大家介绍JAVA如何解决并发问题,包括了JAVA如何解决并发问题的使用技巧和注意事项,需要的朋友参考一下 并发问题的根源在哪 首先,我们要知道并发要解决的是什么问题?并发要解决的是单进程情况下硬件资源无法充分利用的问题。而造成这一问题的主要原因是CPU-内存-磁盘三者之间速度差异实在太大。如果将CPU的速度比作火箭的速度,那么内存的速度就像火车,而最惨的磁盘,基本上就相当于人双腿走路。 这样

  • 下面的问题是我想反转一个整数的位数。 < li >例1: x = 123,返回321 < li >示例2: x = -123,return -321 我的代码适用于9位数以下的所有情况。如果是10位输入,则不会写入相反的值。我该怎么做? 我的代码是: