1. Arreglo repetible: ABC tiene tres caracteres y todas las cuerdas de longitud 3, AAA, AAB, AAC ...... CCC tiene un total de 27 tipos
Usando la idea de recursión, el primer carácter se puede seleccionar de ABC y tres opciones. Entonces el problema se transforma en un caso en el que ABC consiste en caracteres de longitud 2. Después de la recursión de bucle, se pueden encontrar todas las posibilidades. Simplemente controle las condiciones de salida del bucle.
La recursión se puede usar para procesarlo, y cuando la longitud del carácter no se conoce, es un procesamiento general. Si sabe la longitud, solo necesita usar múltiples capas de bucles para sacar conclusiones.
Permutación de clase pública {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; por (nuevo 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 (); devolver; } para (int i = 0; i <chs.length; i ++) {buf [len] = chs [i]; por (buf, chs, len-1); }}}Selección repetible, un total de 27 situaciones, los resultados se muestran en la figura a continuación
2. Arreglo completo: todavía tres caracteres ABC, el arreglo completo significa que los personajes no se pueden repetir. Últimos 3*2 = 6 resultados
Puede usar el método en 1, y siempre que determine si los tres caracteres son iguales, el que no es igual es el que se necesita. Tal complejidad del tiempo es n^n, y el tipo de disposición completa es n! ¡Así que necesitamos diseñar una especie de n! algoritmo.
También puedes usar la recursión. Hay N opciones para la primera cadena, y el resto se convierte en un problema de recursión de escala N-1. Las opciones de N para el primer carácter están todas en la cadena. Por lo tanto, el primer carácter se puede usar para intercambiarlo con la posición de 1-N para obtener la situación en N, y luego procesar recursivamente la escala de N-1. Sin embargo, después del procesamiento, debe ser reemplazado y convertirse en el personaje original.
Public Class Organize {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; arreglar (chs, 0, chs.length); } Public static void array (char [] chs, int inicio, int len) {if (start == len-1) {for (int i = 0; i <chs.length; ++ i) system.out.print (chs [i]); System.out.println (); devolver; } for (int i = start; i <len; i ++) {char temp = chs [inicio]; CHS [inicio] = CHS [i]; CHS [i] = temp; disposición (chs, inicio+1, len); temp = chs [inicio]; CHS [inicio] = CHS [i]; CHS [i] = temp; }}}Los resultados de la operación se muestran en la figura a continuación, con un total de 6 combinaciones
3. Combinación: todas las combinaciones de tres caracteres ABC
Encuentre todas las combinaciones, es decir, si se selecciona cada bit de ABC, el primer bit es 2 y el segundo bit es 2. . Entonces hay 2^n tipos en total. 0 significa no tomar, 1 significa selección, para que AB pueda representarse en 110. La representación total de ABC es de 0 a 2^3-1. Luego, la operación bit a bit, si el resultado es 1, el bit actual se emitirá y el resultado 0 no se emitirá.
Public Class Comb {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; peine (CHS); } Public static void peine (char [] chs) {int len = chs.length; int nbits = 1 << len; para (int i = 0; i <nbits; ++ i) {int t; para (int j = 0; j <len; j ++) {t = 1 << j; if ((t & i)! = 0) {// Solo será 1 cuando lo mismo que la operación es 1 System.out.print (CHS [J]); }} System.out.println (); }}}El resultado de salida es el siguiente. El primer comportamiento está vacío, lo que significa que no se toma nadie.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.