Ich habe es immer als ein Permutationsproblem verstanden. Hier ein modernisierter TP1 Code zum Erstellen aller Kombinationen n aus m:
Delphi-Quellcode:
procedure Permute(Head, Tail: String; s: TStrings; const size: Integer);
var
i: Integer;
Newhead, Newtail: String;
begin
for i := 1 to Length(Tail) do
begin
Newhead := Head + Tail[i];
Newtail := Tail;
Delete(NewTail, i, 1);
if (Newtail = '') or (Length(Newhead) = size)
then s.Add(NewHead)
else Permute(Newhead, Newtail, s, size);
end;
end;
Der passende Aufruf zu deinem Beispiel:
Delphi-Quellcode:
begin
sNumber := '123';
s := TStringList.Create;
Permute('', sNumber, s, Length(sNumber));
WriteLn(s.Text);
s.Free;
end;
Hier in der
DP habe ich auch schon nicht-rekursive Lösungen gesehen.
Grüße vom marabu