Angenommen das Alphabet hat 2 Buchstaben, so wäre dein Array [A, B]. Danach gibt es also die Buchstabenkombinationen "", "A", "B", "AA", "AB", "BA" und "BB". Die Lösung entspricht also einem Baum, dessen Knoten die möglichen Strings repräsentieren, siehe Bild. Mit mehr Buchstaben wird das Ganze nur unübersichtlicher, funktioniert aber prinzipiell gleich.
Der Baum hat immer die Höhe h=n+1 (wobei n die Anzahl der Buchstaben ist) und auf jeder Ebene x = e*n Buchstabenkombinationen wobei e die Ebene ist, die bei 0 mit dem leeren Element anfängt. Was du nun zu tun hast ist den Baum systematisch zu durchlaufen (siehe Bild). Jedes mal, wenn du einen Knoten das erste mal besuchst (also von einer niedrigen Ebene auf eine höhere kommst), fügst du den Buchstaben zu deinem String dazu, jedes Mal wenn du von einer hohen Ebene auf eine niedrige springst, entfernst du den letzten Buchstaben wieder.
Die Abbildung des Baums ist ebenfalls recht einfach: Dazu reicht ein Array mit den 2 Elementen des Alphabets. Da alle Buchstaben in jeder Ebene vorkommen, kann man sich darüber ausrechnen zu welchem Element man als nächstes kommt, wenn man den baum wie im Bild durchläuft.