把n个字符全排列的步骤:
1. 全排列右边的n-1个字符
2. 轮换所有n个字符
3.重复以上步骤n次
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Anagram {
static int size;
static int count;
static char[] c = new char[100];
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("enter a word:");
String str = getString();
count =0;
size = str.length();
for(int i =0;i<size;i++)
{
c[i]=str.charAt(i);
}
doAnagram(size);
}
private static void doAnagram(int size2) {
// TODO Auto-generated method stub
if(size2==0)
return;
for(int i=0;i<size2;i++)
{
doAnagram(size2-1);
if(size2==2)
display();
rotate(size2);
}
}
private static void rotate(int size2) {
// TODO Auto-generated method stub
int pos = size - size2;
char temp = c[pos];
int i;
for(i = pos;i<size-1;i++)
c[i]=c[i+1];
c[i]=temp;
}
private static void display() {
// TODO Auto-generated method stub
count++;
for(int i=0;i<size;i++)
System.out.print(c[i]);
System.out.print(" ");
if(count%6==0)
System.out.println();
}
private static String getString() {
// TODO Auto-generated method stub
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader bin = new BufferedReader(in);
String s;
try {
s = bin.readLine();
return s;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}