Seguinte: peguei um exerciciozinho do livro pra exercitar um tópico mas … a relação dele com o tópico é simples, mas estou apanhando para lógica do treco.
O exercício é bem simples: um usuário digita um número de telefone ( de oito dígitos, sem 0s e 1s ) e o programa tem que fazer a combinação de todas as palavras possíveis com as letras correspondentes aos números (olhem para o teclado de vossos celulares que entenderão hehe).
Então um array com os dados ficaria mais ou menos assim:
0
1
2 a b c
3 d e f
4 g h i
5 j k l
6 m n o
7 p q r s
8 t u v
9 w x y z
Alguém poderia me dar uma luz de como percorrer todas as combinações possíveis de oito letras de maneira elegante? Valeu!
9
De qualquer forma a ordem do algoritmo é 3^n.
recursão é legal …
use um hash code que contenha o significado dos números, como um vetor de String. concatene cada caractere a uma string resultado. passe ela para baixo até que o nível da recursão seja igual ao tamanho da sequencia. Atençao ao estouro de memória que pode acontecer com sequencias grandes.
public myMethod (int index, String sequence, String result)
index++;
String[] string = hashcode(sequence.get(index);
for (int i=0; i <= 3; i++)
result = resul + string;
if (index < sequence.size())
myMethod(index, result);
....
Voce pode também resolver utilizando contadores, assim evita recursão.
Voce implementa uma função que te retorna a combinação seguinte e usa ela exaustivamente, o código a seguir faz isso para todas combinações de ate 4 opções: