Genere permutaciones de cadenas con longitudes de 2 a N dadas N letras en Java

Dado el siguiente método recursivo de Java:

protected static void makeStringsList(List<String> strings, List<Character> letters) {
  if (letters.size() == 2) {
    strings.add(letters.get(0) + "" + letters.get(1));
    strings.add(letters.get(1) + "" + letters.get(0));
  }
  else {
    Character c = letters.remove(0);
    makeStringsList(strings, letters);
    List<String> tempList = new ArrayList<String>();
    for (String s : strings) {
      StringBuffer buffer = new StringBuffer(s);
      for (int index = 0; index < s.length() + 1; index++) {
        buffer.insert(index, c);
        tempList.add(buffer.toString());
        buffer = new StringBuffer(s);
      }
    }
    strings.addAll(tempList);
  }
}

Dadas N letras, el código anterior genera una lista que contiene permutaciones de cadenas que usan todas esas mismas letras N. Por ejemplo, dado (1, 2, 3), genera:

  • 123
  • 132
  • 213
  • 231
  • 312
  • 321
También agrega cadenas con menos de N letras a la lista, pero no son exhaustivas. Usando el mismo ejemplo, 23 y 32 también están en la lista, pero 12, 21, 13 y 31 no están en la lista.

Originalmente había creado el método anterior para un kata en el que estaba trabajando anteriormente aquí durante mi tiempo libre, y quiero modificarlo ahora para poder hacerlo más general y devolver una lista que contenga permutaciones de cadenas con longitudes de 2 a N dado N letras. ¿Es posible modificar el método anterior para realizar esta tarea? ¿Algun consejo? Su consejo será muy apreciado!

Respuesta 1

Tengo problemas para migrar mis archivos Java de Ubuntu a Mac. Mac se queja de mi uso de SwingWorker --- no puede encontrar javax.swing.SwingWorker. En la terminal de Mac, hacer java -version me dice que ...

Actualmente estoy usando SectionStack de SmartGWT. Tengo ocho SectionStackSections para esta pila. Tengo el VisibilityMode establecido en MULTIPLE. Dentro de cada sección hay un bloque de texto que puede variar ampliamente en ...

Estoy tratando de extraer una serie de imágenes de una página web. El método convencional que utiliza: Elementos media = doc.select ("[src]"); no sirve de nada ya que hay 87 etiquetas src en esta página y solo ...

En la creación de la aplicación Calendario, tengo una rueda giratoria para mostrar la lista de cuentas sincronizadas. El código se da a continuación ... Obtengo la lista de cuentas sincronizadas. Pero la repetición de "Contactos" ...