1. Arranjo repetível: ABC tem três caracteres e todas as cordas de comprimento 3, AAA, AAB, AAC ...... CCC tem um total de 27 tipos
Usando a idéia de recursão, o primeiro caractere pode ser selecionado no ABC e três opções. Então o problema é transformado em um caso em que o ABC consiste em caracteres do comprimento 2. Após a recursão de loop, todas as possibilidades podem ser encontradas. Basta controlar as condições de saída do loop.
A recursão pode ser usada para processá -la e, quando o comprimento do caractere não é conhecido, é processamento geral. Se você conhece o comprimento, só precisa usar várias camadas de loops para tirar conclusões.
classe pública Permutação {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; por (novo char [3], CHS, 3-1); } public static void por (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 (); retornar; } para (int i = 0; i <chs.length; i ++) {buf [len] = chs [i]; por (buf, chs, len-1); }}}Seleção repetível, um total de 27 situações, os resultados são mostrados na figura abaixo
2. Arranjo completo: Ainda três caracteres ABC, arranjo completo significa que os caracteres não podem ser repetidos. Últimos 3*2 = 6 resultados
Você pode usar o método em 1 e, desde que determine se os três caracteres são iguais, aquele no arranjo completo que não é igual é o necessário. A complexidade desse tempo é n^n e o tipo de arranjo completo é n! Então, precisamos projetar um tipo de n! algoritmo.
Você também pode usar a recursão. Existem n opções para a primeira sequência, e o restante se torna um problema de recursão da escala N-1. As N opções para o primeiro caractere estão todas na string. Portanto, o primeiro caractere pode ser usado para trocá-lo com a posição de 1-n para obter a situação em n e, em seguida, processar recursivamente a escala de N-1. No entanto, após o processamento, ele precisa ser substituído e se tornar o personagem original.
classe pública Organizar {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; providenciar (chs, 0, chs.length); } public static void Array (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 (); retornar; } para (int i = start; i <len; i ++) {char temp = chs [start]; chs [start] = chs [i]; chs [i] = temp; arranjo (chs, start+1, len); temp = chs [start]; chs [start] = chs [i]; chs [i] = temp; }}}Os resultados da operação são mostrados na figura abaixo, com um total de 6 combinações
3. Combinação: todas as combinações de três caracteres ABC
Encontre todas as combinações, ou seja, se cada bit de ABC é selecionado, o primeiro bit é 2 e o segundo bit é 2. . Portanto, existem 2^n Tipos no total. 0 significa não tomar, 1 significa seleção, para que o AB possa ser representado por 110. A representação total do ABC é de 0 a 2^3-1. Em seguida, operação bitwise, se o resultado for 1, o bit atual será emitido e o resultado 0 não será emitido.
public class Comb {public static void main (string [] args) {char [] chs = {'a', 'b', 'c'}; pente (chs); } public static void pente (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) {// será apenas 1 quando o mesmo que a operação for 1 sistema.out.print (chs [j]); }} System.out.println (); }}}O resultado da saída é o seguinte. O primeiro comportamento está vazio, o que significa que ninguém é levado.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.