我发现一个在线的链接,显示一个算法来生成字符串的所有组合:
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行的原因是什么?