与えられた文字の全配列出力アルゴリズム[JAVA]


 

 
/*
   @author wenmin.h
*/
public class Permutation 
{	
	public static void listAll(char[] arr_Str)
	{
		if(arr_Str.length<=1)
		{
			System.out.println(arr_Str[0]);
			return;
		}
		doPerm(0+1,arr_Str,new char[]{arr_Str[0]});
	}

              /*
	index:              
	arr_All:       
	arr_Already:             
	*/
	private static  void doPerm(int index,char[]arr_All,char[]arr_Already)
	{
		if(index == arr_All.length-1)
		{
			for(int i = 0; i <= index; i++)
			{
				System.out.println(new String(insertAt(arr_Already,i,arr_All[index])));
			}

		}
		else
		{
			for(int i = 0; i <= index; i++)
			{
				doPerm(index+1,arr_All,insertAt(arr_Already,i,arr_All[index]));
			}
		}
	}

	//          ,             
	private static char[] insertAt(char[] char_Arr,int index,char c)
	{
		char[] tmp = new char[char_Arr.length+1];
		for(int i = 0,j=0;i<tmp.length;i++,j++)
		{
			if(i==index)
			{
				tmp[index]= c;
				j--;
			}
			else
			{
				tmp[i] = char_Arr[j];
			}
		}
		return tmp;
	}

	public static void main(String[] args)
	{   
		if(args.length==0)
		{
			System.out.println("Nothing input!");
			System.exit(0);
		}
		char[] arr_Str = args[0].toCharArray();
		listAll(arr_Str);

	}
} 

  
 
コマンドラインで実行:java Permutation ab
結果:
 ba
 ab
 
もし同じことがあったら偶然だ--!
 
入力した文字に同じ文字がある場合、全配列の出力が重複しないようにするにはどうすればいいか考えてみましょう.