`
咖啡舞者
  • 浏览: 126979 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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

    博客分类:
  • 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

 

如有雷同纯属巧合 - -!

 

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

2
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics