我在网上找到了一个链接,该链接显示了一种生成字符串所有组合的算法: 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 行的原因是什么?
原文由 john 发布,翻译遵循 CC BY-SA 4.0 许可协议
调用
outstr.deleteCharAt
outstr.append
通过删除 --- 的最后一个字符来outstr
的影响。每个循环迭代过程如下:
i+1