利用java知识编写全排列算法,里面有我的个人理解注释
代码如下:
package demo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@SuppressWarnings("unchecked")
public class 全排列
{
public static void main(String[] args)
{
//定义一个String的数组,用于存储abcd四个字符
String s[]={"a","b","c","d"};
/*进行迭代操作
@Arrays.asList(s) 将String[]数组转换为List集合
@New ArrayList() 创建一个List集合,用于接收每次迭代出来的字符,保存在List集合
*/
sort(Arrays.asList(s), new ArrayList());
}
//定义一个数字NUM,用于迭代出的数据的长度,
//例:NUM=3
//输出:abc abd bac bad
private static int NUM=4;
//进行全排序
/*
* @datas 存储数据{a,b,c,d}
* @target 允许接收数据最大的长度为NUM
*/
public static void sort(List datas,List target){
//@1.当taret的长度为NUM时表示已将达到输出的条件,进行输出
if(target.size()==NUM){
//迭代数据,保存为Object数据类型
for(Object o:target){
System.out.print(o);
}
//换行
System.out.println("");
//返回
return;
}
//@2.当traget的长度达不到NUM的值时,将数据保存在target集合中
/**
* @newtarget 重新创建一个target集合,接收target中的数据(代表一种数据输出完后,重新开始新的迭代)
* @newdatas 接收datas中的数据,迭代datas中的数据
*/
for(int i=0;i<datas.size();i++){
//创建newDatas集合,用于接收datas中的数据
List newDatas=new ArrayList(datas);
//创建newTarget集合,用于接收target中的数据
List newTarget=new ArrayList(target);
//target集合冲datas中一条条的去取数据
newTarget.add(datas.get(i));
//datas则相应的减少一条数据
newDatas.remove(i);
//然后进行递归,判断是否满足输出条件,进行输出
sort(newDatas, newTarget);
}
}
}