1. Повторяемое расположение: ABC имеет три символа и все строки длины 3, AAA, AAB, AAC ...... CCC имеет в общей сложности 27 видов
Используя идею рекурсии, первый символ может быть выбран из ABC и трех вариантов. Затем проблема превращается в случай, когда ABC состоит из символов длины 2. После рекурсии цикла можно найти все возможности. Просто контролируйте условия выхода петли.
Рекурсия может использоваться для его обработки, и когда длина символа неизвестна, это общая обработка. Если вы знаете длину, вам нужно использовать только несколько слоев петель, чтобы сделать выводы.
Public Class перестается {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; Per (New Char [3], CHS, 3-1); } public static void per (char [] buf, char [] chs, int len) {if (len == -1) {for (int i = buf.length -1; i> = 0; -i) system.out.print (buf [i]); System.out.println (); возвращаться; } for (int i = 0; i <chs.length; i ++) {buf [len] = chs [i]; Per (Buf, CHS, Len-1); }}}Повторяемый выбор, в общей сложности 27 ситуаций, результаты показаны на рисунке ниже
2. Полное расположение: все еще три персонажа ABC, полное расположение означает, что символы нельзя повторить. Последние 3*2 = 6 результатов
Вы можете использовать метод в 1, и пока вы определяете, равны ли три символа, тот, который в полном договоренности, который не является равным, является той, которая необходима. Такая сложность времени n^n, а тип полной договоренности - n! Так что нам нужно спроектировать своего рода n! алгоритм.
Вы также можете использовать рекурсию. Существуют n вариантов для первой строки, а остальное становится проблемой рекурсии шкалы N-1. Выбор N для первого символа все в строке. Следовательно, первый символ может быть использован для обмена его с положением 1-N для получения ситуации в N, а затем рекурсивно обрабатывать шкалу N-1. Однако после обработки его нужно заменить и стать оригинальным персонажем.
Общедоступный класс Arrange {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; договориться (chs, 0, chs.length); } public static void-массив (char [] chs, int start, int len) {if (start == len-1) {for (int i = 0; i <chs.length; ++ i) system.out.print (chs [i]); System.out.println (); возвращаться; } for (int i = start; i <len; i ++) {char temp = chs [start]; chs [start] = chs [i]; chs [i] = temp; Расположение (CHS, Start+1, Len); temp = chs [start]; chs [start] = chs [i]; chs [i] = temp; }}}Результаты работы показаны на рисунке ниже, в общей сложности 6 комбинаций
3. Комбинация: все комбинации трех символов ABC
Найдите все комбинации, то есть независимо от того, выбирается ли каждый бит ABC, первый бит составляет 2, а второй бит - 2. Полем Таким образом, в общей сложности 2^N типа. 0 означает не принимать, 1 означает выбор, чтобы AB мог быть представлен 110. Общее представление ABC составляет от 0 до 2^3-1. Затем, побитовая работа, если результат составляет 1, текущий бит будет выводится, а результат 0 не будет выводиться.
Общедоступный Class Comb {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; расчет (CHS); } public static void comb (char [] chs) {int len = chs.length; int nbits = 1 << len; for (int i = 0; i <nbits; ++ i) {int t; for (int j = 0; j <len; j ++) {t = 1 << j; if ((t & i)! = 0) {// это будет только 1, если такая же, как операция 1 System.out.print (chs [j]); }} System.out.println (); }}}Результат вывода выглядит следующим образом. Первое поведение пустое, что означает, что никого не принимается.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.