Я нашел ссылку онлайн, в которой показан алгоритм для создания всех комбинаций строки: 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?