[Java] J'ai essayé d'implémenter la combinaison.

J'ai essayé d'implémenter une combinaison de mathématiques en Java

J'ai essayé d'implémenter en Java une combinaison qui prend différents r sur n différents. J'ai vu une implémentation qui boucle autant que r, J'ai pensé à diverses choses pour que ce soit bien si r pièces changeaient.

Code source

Le code ci-dessous est conçu pour prendre 3 sur 5.

import java.util.ArrayList;
import java.util.List;

public class Trial {

    public static void main(String[] args) {
        Trial me = new Trial();
        me.exec(args);
    }

    public void exec(String[] args) {
        //Tableau de chaînes
        String[] strArray = new String[] { "a", "b", "c", "d", "e" };
        //Obtenez la combinaison
        String[][] combinations = getCombinations(strArray, 3);
        //Sortie de résultat
        for (String[] combination : combinations) {
            for (String str : combination) {
                System.out.print("  " + str);
            }
            System.out.println();
        }
    }

    private String[][] getCombinations(String[] strArray, int selectCount) {
        //Liste des résultats d'emballage
        List<String[]> list = new ArrayList<>();
        //Je l'utilise un peu, donc je le garde dans une variable
        int len = strArray.length;
        //Trouvez la valeur maximale en binaire à partir de la longueur du tableau.
        int dec = 0;
        for (int i = 0; i < len; i++) {
            dec += Math.pow(2, i);
        }
        //Décrémenter de la valeur maximale.
        for (int num = dec; 0 < num; num--) {
            //Faites-en une chaîne de caractères de notation binaire. (0 n'est pas rempli)
            String bin = Integer.toBinaryString(num);
            if (!isCombination(bin, selectCount)) {
                //Ignorez si le nombre de 1 ne correspond pas à la sélection.
                continue;
            }
            int j = bin.length() - 1;
            int tmplen = len - bin.length();
            String[] combination = new String[selectCount];
            int idx = selectCount - 1;
            for (int i = len - 1; tmplen <= i; i--) {
                if (bin.charAt(j--) == '1') {
                    combination[idx--] = strArray[i];
                }
            }
            list.add(combination);
        }
        return list.toArray(new String[0][0]);
    }

    private boolean isCombination(String str, int selectCount) {
        int sum = 0;
        for (int i = 0; i < str.length(); i++) {
            sum += Character.getNumericValue(str.charAt(i));
        }
        if (sum == selectCount) {
            return true;
        }
        return false;
    }
}

Résultat d'exécution

  a  b  c
  a  b  d
  a  b  e
  a  c  d
  a  c  e
  a  d  e
  b  c  d
  b  c  e
  b  d  e
  c  d  e

La combinaison de 5 à 3 est 5! / (2! * (5-2)!) = 10 Peut-être que ça va.

finalement

Je pense qu'il y a beaucoup de place à l'amélioration en considérant les performances et en traitant de grands nombres.

c'est tout

Recommended Posts

[Java] J'ai essayé d'implémenter la combinaison.
J'ai étudié le constructeur (java)
J'ai essayé le framework Java "Quarkus"
J'ai essayé le nouveau yuan à Java
[jour: 5] J'ai résumé les bases de Java
[Java] J'ai personnellement résumé la grammaire de base.
Je suis allé au Java Women's Club # 1
J'ai comparé les caractéristiques de Java et .NET
Pourquoi Java était la langue cible que je déteste
Essayez Progate Free Edition [Java I]
Calcul combiné (triangle de Pascal) (Java)
[Java] J'ai essayé d'implémenter la combinaison.
Générer l'URL de l'API CloudStack en Java
Java
Java
J'ai d'abord touché Java ②
J'ai d'abord touché Java ③
J'ai d'abord touché Java ④
J'ai d'abord touché Java
[Java] Je souhaite calculer la différence par rapport à la date
J'ai résumé les types et les bases des exceptions Java
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
Ce que j'ai recherché sur Java 8
J'ai enquêté sur l'instance englobante.
J'ai commencé Java Gold (Chapitre 1-1)
Je n'ai pas vraiment compris le comportement de Java Scanner et .nextLine ()
[Java] ArrayList → La taille doit-elle être spécifiée dans la conversion de tableau?
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
J'ai essayé de résumer les bases de kotlin et java
J'ai résumé le cadre de la collection.
J'ai fait une roulette à Java.
[Rails] J'ai implémenté le message d'erreur de validation avec une communication asynchrone!
J'ai étudié les types primitifs Java
Le Java Primer a passé le blocage
J'ai pris Java SE8 Gold.
J'ai essayé Drools (Java, InputStream)
Calcul combiné (triangle de Pascal) (Java)
Je souhaite utiliser l'API Java 8 DateTime lentement (maintenant)
Ce que j'ai recherché sur Java 7
J'ai essayé d'utiliser Java REPL
J'ai lu le livre de démarrage de Kotlin
J'ai essayé le problème FizzBuzz
Je ne suis pas sûr du traitement parallèle Java
J'ai essayé d'utiliser la bibliothèque CameraX avec Android Java Fragment
5ème jour de Java
J'ai essayé la métaprogrammation avec Java
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
Ce que j'ai recherché sur Java 5
Entrée dans la console Java
J'ai essayé d'implémenter le code pour apprendre plusieurs images à la fois dans la Watson Visual Recognition Collection en Java
J'ai fait un "Sunshine Ikezaki game" que j'ai vu sur Twitter en Java.
Java14 est sorti, alors j'ai essayé d'enregistrer pour le moment
Je veux revenir à l'écran précédent avec kotlin et java!
J'ai essayé le type d'entrée / sortie de Java Lambda ~ Map edition ~
J'ai essayé de traduire le message d'erreur lors de l'exécution d'Eclipse (Java)
J'ai essayé de résumer les méthodes de Java String et StringBuilder
[Java] Je veux effectuer distinctement avec la clé dans l'objet
J'ai essayé d'exécuter le formulaire FaaS compatible Java "Fn Project"
Depuis que j'ai réussi l'Oracle Java Bronze, j'ai résumé les grandes lignes du test.
J'ai essayé d'afficher le calendrier sur la console Eclipse en utilisant Java.
Accéder à l'interface réseau avec Java