【问题标题】:Reverse an integer without losing 0's in input反转整数而不丢失输入中的 0
【发布时间】:2023-03-20 13:36:01
【问题描述】:

我有以下代码可以反转整数输入。但是,如果我在开头输入零,例如01234,它将返回整数 4321 而不是 43210。我查看了其他解决方案,但它们都通过将输入作为字符串然后反转字符串来解决问题。但是,我需要输入为 int 类型。

有人知道我该如何解决这个问题吗?

public static int reverseInputNumber(int num){
    int reverse = 0;
    while(num!=0) {
        reverse = (reverse*10)+num%10;
        num /= 10;
    }
    return reverse;
}

【问题讨论】:

标签: java int reverse


【解决方案1】:

整数存储一个整数值,而不是整数值的特定表示的编码。所以为了真正得到你想要的东西,你正在谈论反转整数的表示。

编辑:我想我会添加一些代码来解决使用字符串的解决方案。

public static int reverseInputNumber(int num)
{
    String reverse = StringBuilder(num + "").reverse().toString();
    return reverse;
}

第二次编辑:实际上,即使这段代码也不会做你想做的事。通过将 int 作为参数,您已经失去了整数的原始表示。准确地说,没有一个函数可以只接受一个整数参数并返回与其原始表示相反的东西。您将只需要处理字符串或其他更合适的数据结构。

【讨论】:

    【解决方案2】:

    在 java 中,使用零作为最高有效数字,它将数字解释为八进制数。所以01234 被转换为:

    4 + 3 x 8 + 2 x 8^(2) + 1 x 8^(3) = 668
    

    因此,最好使用其他答案中的一种转换为字符串的方法。

    编辑:这是一个没有StringBuffer等的版本:

    public String getReversed(int number) {
        char[] digitArray = String.valueOf(number).toCharArray();
        String strNum = "";
    
        for (int i = digitArray.length - 1; i >= 0; i--) {
            strNum += digitArray[i];
        }
        return strNum;
    }
    

    第二次编辑: 反转char 数组,然后在完成反转后创建String,因为可能会创建许多O(n^2) 操作,这可能是垃圾问题收集器。

    public String getReversed(int number) {
        char[] digitArray = String.valueOf(number).toCharArray();
        char[] reversedDigitArray = new char[digitArray.length];
    
        for (int i = 0; i < digitArray.length; i++) {
            reversedDigitArray[i] = digitArray[digitArray.length - i - 1];
        }
        return new String(reversedDigitArray);
    }
    

    第三次编辑:用就地算法交换字符。

    public static String getReversed(int number) {
        char[] digitArray = String.valueOf(number).toCharArray();
        int count = digitArray.length - 1;
        char tmp;
    
        for (int i = (count-1) >> 1; i >= 0; --i) {
            tmp = digitArray[i];
            digitArray[i] = digitArray[count - i];
            digitArray[count - i] = tmp;
        }
        return new String(digitArray);
    }
    

    【讨论】:

    • 最好简单地将 char[] 反转,然后使用 String(Char[]) 构造函数,因为就目前而言,有可能创建许多 O(N^ 2) 带有大量垃圾收集的操作。
    • @VarunMadiath 这样更好吗?
    • 我会说是,进一步的改进是对它进行排序,但是 int 最大值的位数使得这里的惩罚太小了,不用担心。
    • 没问题,我刚刚更新了我的答案来描述为什么我们的方法都不起作用。
    • 我正在查看您的第三次编辑,我想知道您为什么使用正确的班次?我似乎找不到原因,需要解释一下吗?
    【解决方案3】:

    如果您的输入需要是 int,则将其转换为 String 并反转。

    String reverseInt(int in){
        String a = Integer.toString(in);
        return new StringBuilder(a).reverse().toString();
    }
    

    如果您的输出必须是 int,则无法使用前导 0

    【讨论】:

      猜你喜欢
      • 2012-02-19
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多