使用递归在每个偶数后添加0

时间:2017-06-27 00:11:55

标签: java recursion

大家好,

我想和你分享我的问题。我正在练习递归方法,我注意到某个地方有一个练习。练习是关于制作递归方法,它为每个偶数加0。如果有人有一些想法,如果你在这里分享会很棒。

代码将是这样的:

public static String adding0AfterEvenNumber(int number) {

    String s = String.valueOf(number);
    String result;
    if (number < 10 && number % 2 == 0) {
        return s + 0;
    }
}

我错过了代码的主要部分,但我真的不知道如何创建它。提前致谢

3 个答案:

答案 0 :(得分:3)

考虑这段代码(在线评论)

 // somewhere to store the result
 static StringBuilder result = new StringBuilder();

 public static void main(String [] args) {

     // starting string
     String s = "1234567";
     // or as 
     //String s = Integer.toString(1234567);

     // call with full string
     recurse (s);

     // print result
     System.out.println("result : " + result.toString());
}

private static void recurse(String s) {

    // take first char and add to result
    String c = s.substring(0,1);
    result.append(c);

    // see if even, note no error checking for is a number
    if (Integer.parseInt(c) % 2 == 0) {
        result.append("0");
    }

    // then if still has content then strip off first char and call again
    if (s.length() > 1)
        recurse(s.substring(1));

}

<强>输出

结果:1​​203405607

答案 1 :(得分:2)

你可以递归这样的事情:

public static String adding0AfterEvenNumber(int number) {
    return ((number >= 10) ? adding0AfterEvenNumber(number / 10) : "") + String.valueOf(number % 10) + ((number % 2 == 0) ? "0" : "");
}

试试here

&#13;
&#13;
<script src="//repl.it/embed/JDEV/1.js"></script>
&#13;
&#13;
&#13;

第一部分是终端条件,如果有一位数字则不附加任何内容,否则在删除最后一位数后调用递归:

(number > 10) ? adding0AfterEvenNumber(number / 10) : "")

如果是偶数,第二部分将最后一位数加零:

String.valueOf(number % 10) + ((number % 2 == 0) ? "0" : "")

答案 2 :(得分:0)

据我所知,偶数位是偶数值不在偶数位置的数字。下面的函数应该返回一个带有值的字符串,尽管你可以返回一个整数,如果你将头部值移动到尾部有多少位数。

    public String add0onEven(int number, int initPos, int endPos) {
    if (initPos == endPos - 1) {
        int digit = (number / (int) Math.pow(10, initPos)) % 10;
        if (digit % 2 == 1) {
            return digit + "0";
        } else {
            return "" + digit;
        }
    } else if (endPos - initPos < 1) {
        return "";
    } else {
        int sepIdx = (endPos - initPos) / 2 + initPos;
        String tail = add0onEven(number, initPos, sepIdx);
        String head = add0onEven(number, sepIdx, endPos);
        return head + tail;
    }
}

你可以这样调用这个方法:

add0onEven(1234567, 0, 7)

为此调用获取的输出:

10230450670

我认为这个解决方案比子串更好,因为它对内存的影响较小(不需要在每个子串调用上创建一个新的字符串)。此外,它遵循分而治之的方法,更适合递归。