Алгоритмы расположения и комбинации широко используются и должны быть освоены. Чтобы снизить порог, эта статья в основном фокусируется на логике и простоте алгоритма, но не обращает внимания на эффективность алгоритма. Сочетая реализацию в онлайн -книгах и их собственных потребностях, здесь есть четыре цели:
1. Полное расположение всех элементов: полное расположение AB - AB, BA (порядок);
2. Полная комбинация всех элементов: полная комбинация AB - A, B, AB (порядок нерелевантный);
3. Узнайте, каковы комбинации выбора M -элементов среди N -элементов: комбинация 2 элементов в ABC - AB, AC, BC;
4. Узнайте, каковы меры для выбора M -элементов среди N -элементов: соглашения о выборе 2 элементов в ABC - AB, BA, AC, CA, BC, CB;
Можно обнаружить, что после обнаружения расположения выбора M -элементов между N -элементами мы фактически организуем набор элементов (массивов), состоящих из каждой комбинации после обнаружения метода комбинации Mements Ming среди N -элементов, так что это функция сборки, а примеры не указаны. Для других трех целей см. Код:
Public Final Class PermoutationCombination Holder { / ** Полная комбинация элементов массива* / статическая комбинация void (char [] chars) {char [] subchars = new char [chars.length]; // массивы, которые хранят данные субкомбинирования // Проблема всей комбинации состоит в том, чтобы выбрать 1 элемент из всех элементов (обозначенный как n), плюс комбинация 2 элементов ... плюс сумма комбинации n элементов для (int i = 0; i <chars.length; ++ i) {final int m = i +1; комбинация (chars, chars.length, m, subchars, m); }} /*** Реализация комбинации n элементов с n -элементами. Принцип заключается в следующем: * Выберите сзади на фронт, выберите «Положение I», а затем выберите M-1 в первом I-1. * Например: 3 элемента выбираются из 1, 2, 3, 4, 5. * 1) после выбора 5, затем выбирают 2 в первых 4, а выбор 2 в первых 4-еще одна подпрограмма, просто рекурсивная; * 2) Если вы не включаете 5, выберите 4 напрямую, то выберите 2 в первых 3, а выбор 2 в первых трех-еще одна подпрограмма, просто рекурсивная; * 3) Если вы не включите 4, выберите 3 напрямую, то выберите 2 в первых 2, и есть только два в первом 2. * Глядя на вертикальное направление, 1 и 2 и 3 оказываются для цикла, начальное значение составляет 5, а конечное значение - m. * Глядя на горизонтальное направление, эта проблема является рекурсивным M-1 в первом I-1. */статическая комбинация void (char [] chars, int n, int m, char [] subchars, int subn) {if (m == 0) {// экспорт для (int i = 0; i <subn; ++ i) {System.out.print (subchars [i]); } System.out.println (); } else {for (int i = n; i> = m; - i) {// select subchars [m - 1] = chars [i - 1]; // выберите комбинацию (Chars, I - 1, M - 1, Subchars, Subn); // Выберите M-1 из первого i-1 для рекурсии}}}}/ ** Полная перестановка элементов массива*/ static void перестановку (char [] chars) {перестановка (chars, 0, chars.length-1); } /** Субаррей в массиве из индекса Начните индекс, участие в полной перестановке* /Статическая переметания (char [] chars, int begin, int end) {if (begin == end) {// Выход - это когда только последний персонаж остается (int i = 0; i <charslength; ++ i) {System.out.print (wars]; } System.out.println (); } else {for (int i = begin; i <= end; ++ i) {// Каждый символ прикреплен к первым if (canswap (chars, begin, i)) {// deduplicate swap (chars, begin, i); // обменивать перестановку (chars, begin + 1, end); // рекурсивно найти полную перестановку подсасывания суб-оркестров (chars, begin, i); // восстановить}}}}} static void swap (char [] chars, int от, int to) {char temp = chars [from]; chars [from] = chars [to]; chars [to] = temp; } static boolean canswap (char [] chars, int begin, int end) {for (int i = begin; i <end; ++ i) {if (chars [i] == chars [end]) {return false; }} вернуть true; } public static void main (string [] args) {final char [] chars = new char [] {'a', 'b', 'c'}; перестановка (Chars); System.out.println ("===================================================================================Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.