我在网上找到了一个链接,该链接显示了一种算法来生成字符串的所有组合:http://www.mytechinterviews.com/combinations-of-a-string
算法复制如下。
void combine(String instr, StringBuffer outstr, int index)
{
for (int i = index; i < instr.length(); i++)
{
outstr.append(instr.charAt(i));
System.out.println(outstr);
combine(instr, outstr, i + 1);
outstr.deleteCharAt(outstr.length() - 1);
}
}
combine("abc", new StringBuffer(), 0);
我不明白的是:
outstr.deleteCharAt(outstr.length() - 1);
如果我删除此行,则该程序显然不再起作用,但是为什么首先需要这样做?我了解递归的想法,在这个想法中,我们改变了一个初始字符,然后对其余字符进行了递归,但是deleteChar行似乎在逻辑上不适合任何地方。添加outstr.deleteCharAt行的原因是什么?
最佳答案
outstr.deleteCharAt
的调用通过删除outstr.append
的最后一个字符来抵消outstr
的影响。
每个循环的迭代过程如下:
i+1