我正在尝试编写一个方法,将给定的char c插入到位置i的String s中(这些都作为参数给出)。例如,给定'z',3和“bbbb”的参数,它应该返回“bbbzb”。当然,我可以这样做:
return s.substring(0, i) + c + s.substring(i + 1);
但问题是,它必须是递归的。我想出的代码如下:
public static String insertInto(char c, int i, String s) {
return insertIntoHelper(c, i, s, 0);
}
public static String insertIntoHelper(char c, int i, String s, int index) {
if (s == null || s.equals("")) {
return "";
}
if (index == i) {
return c + insertIntoHelper(c, i, s, index++);
} else {
return s.substring(0, 1) + insertIntoHelper(c, i, s.substring(1), index++);
}
}
这里的逻辑是,如果索引小于i,则返回第一个字母,然后返回字符串的其余部分,或者如果索引等于它,则添加字符等。我必须有一个洞逻辑某处,因为它不起作用,当我将索引设置为0时,我甚至会收到错误。任何帮助都会非常感激。
答案 0 :(得分:0)
您的错误是在递归调用中使用后缀增量。
} // |
if (index == i) { // v
return c + insertIntoHelper(c, i, s, index++); // |
} else { // v
return s.substring(0, 1) + insertIntoHelper(c, i, s.substring(1), index++);
}
后缀增量'返回'增量发生之前的int值(JLS 15.14.2)。因此,请使用常规+ 1
。
if (index == i) {
return c + insertIntoHelper(c, i, s, index + 1);
} else {
return s.substring(0, 1) + insertIntoHelper(c, i, s.substring(1), index + 1);
}
虽然我同意其他人的观点,但其他问题更适合递归。
答案 1 :(得分:-1)
试试这个:
public static String insertInto(char c, int i, String s) {
if (i == 0) {
return c+s;
}
if (s.isEmpty()) {
return "";
}
return s.charAt(0) + insertInto(c,i-1,s.substring(1));
}