J'ai essayé de générer une liste de toutes les chaînes de caractères possibles pouvant être constituées de tout jeu de caractères donné. J'ai utilisé une fonction pour générer toutes les 4 caractères à partir d'un ensemble de caractères, mais chaque caractère n'est jamais utilisé qu'une seule fois. J'ai besoin de toutes les combinaisons possibles à l'aide d'un ensemble donné de caractères par exemple: à l'aide de la classe de Générateur de ici ,
Cela retournera toutes les combinaisons de caractères uniques telles que: P> mais, je veux chaque chaîne possible pouvant être créée à l'aide des caractères donnés. Par exemple: P> 'aaaa', 'aaab', 'abc1', 'aac1', '11c2'
5 Réponses :
Vous pouvez traiter vos éléments sous forme de chiffres. Pensez à la façon dont nous obtenons chaque combinaison possible de "0" - "9" en comptant. Commencez par 0000, 0001, 0002, ..., 0010, 0011, etc. Utilisez le même processus, comme si vous disposiez d'un système de numéro de base-6 (ou de base-n, où N est la longueur de vos éléments code> tableau.
string comb;
for (int i = 0; i < elements.length; i++)
for (int j = 0; j < elements.length; j++)
for (int k = 0; k < elements.length; k++)
for (int m = 0; m < elements.length; m++) {
comb = elements[i] + elements[j] + elements[k] + elements[m];
// do something with the combination
}
Des solutions récursives semble assez simple aussi:
public class TestCombinations { public static void main(String[] args) { String[] elements = {"a", "b", "c", "1", "2", "3"}; int maxLength = 4; combineStringFromElements(elements, "", maxLength); } private static void combineStringFromElements(String[] elements, String currentString, int maxLength) { if (currentString.length() == maxLength) { System.out.println(currentString); return; } for (String element : elements) { combineStringFromElements(elements, currentString + element, maxLength); } } }
Aussi une excellente réponse merci, j'ai besoin de vous asseoir et de réfléchir à la récupération de la récursivité et d'essayer de t'éloigner la tête pour comprendre la logique correctement, beaucoup de pensée pour moi !! Merci à tous:)
Merci beaucoup! C'est génial parce que je peux simplement l'écrire directement dans un fichier au lieu de les charger dans la mémoire et le système meurt.
Vous allez devoir être plus précis sur ce que vous voulez que votre fonction obtient. Il existe de nombreuses définitions différentes des "combinaisons" et vous n'avez pas précisé que vous souhaitais que vous souhaitiez des combinaisons commandées ou non ordonnées.
mathématiquement, si vous avez n éléments et que vous voulez une liste de k d'entre eux (commandé avec des répétitions), cela vous donne P>
aaaa aaab aaac aaa1 aaa2 aaa3 aaba aabb aabc aab1 ... 3323 333a 333b 333c 3331 3332 3333
Merci beaucoup! Cette solution a résolu mon problème! Je comprends l'idée de la récursion, mais j'essaie toujours d'envelopper ma tête autour de la solution :( C'est fantastique cependant et m'a donné beaucoup de choses à réfléchir, j'aimerais demander de l'aide de comprendre la récursion et exactement comment elle travaille, je vais essayer de le comprendre maintenant, mais je pense que je serai de retour bientôt haha!
Si vous le souhaitez en Python, vous n'avez pas besoin de savoir comment programmer!
import itertools for p in itertools.permutations('abc123', 4): print ''.join(p)
Tout d'abord, la question concerne Java. Deuxièmement, l'ouvre-fil veut savoir comment programmer. Et c'est toujours préférable de savoir, comment faire des choses et pas seulement les aveugles les utiliser ...
seulement marqué comme la question portait sur Java, pas Python. Dans ce cas, Python n'était pas disponible.
Voici un code Python qui fait ce que vous voulez: espère que cela aide p> Ce type d'algorithme s'appelle Descente récursive , au cas où vous n'aviez pas vérifié cela déjà. p> p>
Je vous suggère également de mentionner que cela est vraiment nécessaire si itTools.combinations code> n'est pas disponible.
@ Τζζτζιου: vrai. Je voulais juste montrer comment ça marche sous le capot. Mais vous avez raison, s'il y a une bibliothèque qui fera ce que vous voulez, puis réinventer la roue est rarement la réponse.