Anagramas

ai galera tudo bom?

acho que esta é meio cabeluda mas vamo la.

estou tentando escrever um codigo que me de todos os anagramas de uma palavra.

por exemplo:

roma -> amor ->omar ->maro e assim até encontrar todas. a palavra não precisa existir.

consegui arranjar um algoritm que resolve o problema. a questão é que ele funciona muito bem com palavras de 4 ou 5 letras mas assima disso fica extremamente lento.

queria saber se vcs conseguem me dar um help.
o codigo é esse ai.[code]
public class Anagrama {
private String palavrAnagrama, anagramaFinal="";
private int tamanho = 0;

public Anagrama() {
}

public int factorial(int n) {
int fact = 1;//não pode começar em zero
for (int h = 1; h <= n; h++) {
fact = fact * h;
}
return fact;
}

public String criarAngrama(String palavra) {
palavrAnagrama = palavra;
tamanho = palavrAnagrama.length();
for (int k = factorial(tamanho); --k > 0; ) {
getSwaps(k, tamanho);
}
return anagramaFinal;
}

public void doSwaps(int[] x, int n) {
int i1, i2;
char[] plain;

plain = palavrAnagrama.toCharArray();
for (int j = n - 1; j >= 1; j--) {
  i1 = j;
  i2 = x[j];
  if ( (i1 < n) && (i1 >= 0) && (i2 < n) && (i2 >= 0)) {
    char temp = plain[i1];
    plain[i1] = plain[i2];
    plain[i2] = temp;
  }
}
//convert back to string
StringBuffer plaintext = new StringBuffer("");
for (int j = 0; j < plain.length; j++) {
  plaintext.append(plain[j]);
}
anagramaFinal=anagramaFinal+","+plaintext.toString();

}
public void getSwaps(int k, int n) {
int[] x = new int[n], y = new int[n];
int r = n - 1;
int factorialDer = factorial®;
x[r] = k / factorialDer;
y[r] = k % factorialDer;
r–;
while (r >= 1) {
factorialDer = factorial®;
x[r] = y[r + 1] / factorialDer;
y[r] = y[r + 1] % factorialDer;
r–;
}
doSwaps(x, n);
}
}
[/code]

desde ja obrigado.