例如,Java递归1234到4321

时间:2017-12-22 16:06:54

标签: java recursion

我有一个问题如何更好地解决这个问题,我有一个版本,但我相信有更好更短的方法可以做到这一点。我需要获取任何int数字(将其作为int返回而不将其转换为String),但从不在结尾处使用0(100,120)但是像1234或4132.我需要使用此数字并使用递归在示例1234到4321,4132到2314的另一个方面重写它,也许有一种方式被称为,我个人不知道它。

这是我得到的:

difference: 25
no_difference: 6

6 个答案:

答案 0 :(得分:0)

使用int的String表示可能会使代码更具可读性。

尝试:

Integer.parseInt(new StringBuilder(r+"").reverse().toString());

答案 1 :(得分:0)

没有注意到递归部分。

public static void main(String[] args) {
    int i = 589;
    System.out.println(reverse(i));
}
public static int reverse(int k){
    if(k/10 == 0){return k;}
    else return (k%10 * (int)Math.pow(10, (int)Math.log10(k))) + reverse(k /10);
}

说明:

  • k%10为您提供了int
  • 的最后一位数字
  • (int)(Math.log10(k))返回 整数中的数字减去一个

答案 2 :(得分:0)

当前代码无法编译。在此行中添加了)

if(r==0{更改为if(r==0){

并在此行;

中添加了return + (r%10) * (int)Math.pow(10, (n-k-1))+reverse (r/10, n, k+1);

这两次更改后的代码如下所示:

public static int reverse(int r, int n, int k){
    if(r==0)
    {
        return 0;
    }else{
        return + (r%10) * (int)Math.pow(10, (n-k-1))+reverse (r/10, n, k+1);
    }
}

如果号码以0结尾,则该程序不会向用户显示任何特殊消息,即1230将返回321。在这种情况下,也许吧 也许打印一条消息(“号码不能以0结尾)或抛出异常?”

答案 3 :(得分:0)

将int转换为string,将其反转并将其转换回int

答案 4 :(得分:0)

    public static final int reverse(int number) {
         final int lastDigit = number % 10;
         final int length = (int) Math.log10(number);

         return (number < 10) ? number : (int) (Math.pow(10.0, length) * lastDigit + reverse(number / 10));
    }

如果数字低于10则数字本身。否则,它的最后一位数乘以10 ^ n,其中n是数字的长度,所以它现在位于第一位数的位置。

然后将剩余数字的反转结果添加到它(没有最后一位数字的数字)。

你可以推进递归函数本身,因为它已经解决了这个大问题。你只需要考虑微不足道的结束条件和一个步骤(这主要是你建议的最后一步)

答案 5 :(得分:0)

这是我使用递归和无转换的最佳方式。

private static int myReverse(int n, int r) {
        if(n == 0)
            return r;

        int newR = r*10 + n%10;

        return myReverse(n/10, newR);
}

我在这里做的是:

  • 两个参数: n - 要反转的数字, r - 反转数字
  • n 等于0时递归停止,因为它总是将其除以10
  • newR - 这个变量是不必要的,但它更适合“理解”这些变量,首先我将 r 乘以10,这样我就可以将最后一个值加到o n 。例如,反向123:如果r = 12n = 3,首先12*10 = 120n%10 = 3然后r*10 + n%10 = 123

只有一个退货声明的“愉快”方式:

private static int myReverse2(int n, int r) {
        return n == 0 ? r : myReverse2(n/10, r*10 + n%10);
}