Lógica

Olá pessoal, bom dia.

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);
            ....

sorry to meio sem tempo para terminar

Valeu cara, vou tentar fazer co mrecursão :slight_smile:

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:

int[] next(int[] seq) {
   for(int i = 0; i < seq.length; ++i) {
     if(++seq[i] >= 4) {
         if(i ==0) return null;
        seq[i] = 0;
      } else 
         break;
  }
   return seq;
}

Para funcionar com teu caso basta modificar a forma como o limite (4) é encontrado.