J'ai une liste:Création de tableaux pour les permutations dans un paragraphe d'une liste
a 25
b 18
c 18
d 18
e 14
f 14
g 12
... and so on
Pour chaque numéro correspondant, je dois obtenir toutes les permutations de l'identifiant. Les listes dont je aurais besoin de mon exemple serait la suivante:
abcdefg
abdcefg
acbdefg
acdbefg
adbcefg
adcbefg
abcdfeg
abdcfeg
acbdfeg
acdbfeg
adbcfeg
adcbfeg
Étapes Je suis actuellement à résoudre le problème:
- Lire dans la liste, placez chaque valeur dans un tableau ([a ] [12]) et placez cela dans une ArrayList
- Je trouve alors s'il y a des nombres récurrents et en fais la note dans un HashMap
- J'ai alors une boucle for configurée pour passer par la HashMap. Si le numéro ne s'est pas répété, je l'ajoute juste à la liste. Si le nombre a répété, j'utilise l'algorithme de Heap pour obtenir toutes les permutations.
Si je devais travailler à travers elle, j'ajouterions les numéros à une liste comme ceci:
a
abcd
abdc
adbc
...
abcdef
abcdfe
abdcef
adbcfe
...
abcdefg
abcdfeg
Mon code actuel ne fonctionne pas comme prévu (génère une seule liste) et je Je ne sais même pas comment commencer à écrire un code qui générerait continuellement de nouvelles listes, tout en ajoutant les anciennes listes. Je m'excuse d'être perdu, je suis dans un cours sur les structures de données en ce moment et tout se sent hors de ma zone de familiarité (nous avons juste commencé à discuter des listes liées).
Note 1: allLists contient toutes les listes actuelles (a, abcd, adcb,) et permutationList contient toutes les permutations de la liste.
Note 2: Je fais cela à travers une liste booléenne, mais utilisé les lettres comme une représentation visuelle facile pour ce que je suis en train d'accomplir
code où je pense que le problème est:
public static Boolean[] combine (int i, int j) {
int aLen = allLists.get(j).length;
int bLen = permutationList.get(i).length;
Boolean[] newList = new Boolean[aLen + bLen];
System.arraycopy(allLists.get(j), 0, newList, 0, aLen);
System.arraycopy(permutationList.get(i), 0, newList, aLen, bLen);
return newList;
}
public static void setAllLists() {
if(allLists.size() == 0) {
allLists.add(permutationList.get(0));
}
for(int i = 0; i < permutationList.size(); i++) {
for(int j = 0; j < allLists.size(); j++) {
Boolean[] newList = combine(i,j);
if(i == 0) {
allLists.set(j, newList);
}
else {
allLists.add(newList);
}
}
}
permutationList.clear();
}
Les numéros sont-ils dans un ordre croissant? Ou ils pourraient être placés au hasard? –
Ils sont en ordre décroissant. Les chiffres du bas ont plus de doublons. J'ai édité mon post pour refléter cela. –
'bcdaefg' est-il une sortie valide ou la chaîne de sortie doit-elle être strictement croissante? –