大家好,
我想和你分享我的问题。我正在练习递归方法,我注意到某个地方有一个练习。练习是关于制作递归方法,它为每个偶数加0。如果有人有一些想法,如果你在这里分享会很棒。
代码将是这样的:
public static String adding0AfterEvenNumber(int number) {
String s = String.valueOf(number);
String result;
if (number < 10 && number % 2 == 0) {
return s + 0;
}
}
我错过了代码的主要部分,但我真的不知道如何创建它。提前致谢
答案 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));
}
<强>输出强>
结果:1203405607
答案 1 :(得分:2)
你可以递归这样的事情:
public static String adding0AfterEvenNumber(int number) {
return ((number >= 10) ? adding0AfterEvenNumber(number / 10) : "") + String.valueOf(number % 10) + ((number % 2 == 0) ? "0" : "");
}
试试here。
<script src="//repl.it/embed/JDEV/1.js"></script>
&#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
我认为这个解决方案比子串更好,因为它对内存的影响较小(不需要在每个子串调用上创建一个新的字符串)。此外,它遵循分而治之的方法,更适合递归。