Smart moyen de générer de la permutation et de combinaison de Chaîne

String database[] = {'a', 'b', 'c'};

Je voudrais générer des chaînes de la suite de la séquence, selon database.

a
b
c
aa
ab
ac
ba
bb
bc
ca
cb
cc
aaa
...

Je ne peux que penser à un joli "factice" de la solution.

public class JavaApplication21 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
char[] database = {'a', 'b', 'c'};
String query = "a";
StringBuilder query_sb = new StringBuilder(query);
for (int a = 0; a < database.length; a++) {
query_sb.setCharAt(0, database[a]);
query = query_sb.toString();                    
System.out.println(query);            
}
query = "aa";
query_sb = new StringBuilder(query);
for (int a = 0; a < database.length; a++) {
query_sb.setCharAt(0, database[a]);    
for (int b = 0; b < database.length; b++) {    
query_sb.setCharAt(1, database[b]);    
query = query_sb.toString();                    
System.out.println(query);
}
}
query = "aaa";
query_sb = new StringBuilder(query);
for (int a = 0; a < database.length; a++) {
query_sb.setCharAt(0, database[a]);    
for (int b = 0; b < database.length; b++) {    
query_sb.setCharAt(1, database[b]);    
for (int c = 0; c < database.length; c++) {                    
query_sb.setCharAt(2, database[c]);                        
query = query_sb.toString();                    
System.out.println(query);
}
}
}
}
}

La solution est assez bête. Il n'est pas à l'échelle-mesure dans le sens que

  1. Ce que si j'augmente la taille de database?
  2. Que faire si mon dernier ciblées imprimer la longueur de la Chaîne doivent être N?

Est-il intelligent de code, ce qui peut générer de l'échelle de mesure de permutation et de combinaison en chaîne dans un vraiment intelligent?

En Python, c'est très simple, haha. print ''.join(query) for query in itertools.combinations_with_replacement(database, length) for length in range(1,N+1)

OriginalL'auteur Cheok Yan Cheng | 2013-11-15