【发布时间】:2012-02-16 11:10:30
【问题描述】:
我在网上找到了一个链接,该链接显示了一种生成字符串所有组合的算法: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 行的原因是什么?
【问题讨论】:
-
由于我们想要所有组合,有charAt(i) 没有它,我们需要将这两种情况分开。那些没有 charAt(i) 的组合在 for 循环的下一次迭代中被处理,在当前迭代结束之前通过 deleteCharAt() 的魔力。
标签: java algorithm combinations