欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

给定字符的全排列输出算法[JAVA]

程序员文章站 2022-07-12 15:37:05
...
 

 

/*
   @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

 

如有雷同纯属巧合 - -!

 

可以思考下如果输入的字符中有相同的,那么如何避免全排列的输出出现重复?