我在网上找到了一个链接,该链接展示了一种生成字符串所有组合的算法: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行的原因是什么?