JAVA实现全排列算法(去重复)
2016-04-29 00:00
561 查看
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。在原作者的基础上[/color][color=#000080]加了去重复排列
参考实例:
package example; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; /** * <p> * Title:全排列算法 */ public class FullSort { //将NUM设置为待排列数组的长度即实现全排列 private static int NUM = 4; private static Set<String> set = new HashSet<String>(); /** * 递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列 * * @param datas * @param target */ private static void sort(List datas, List target) { if (target.size() == NUM) { StringBuffer sf = new StringBuffer(); for (Object obj : target){ sf.append(obj); System.out.print(obj); } System.out.println(); set.add(sf.toString()); return; } Set<String> sortCharacter = new HashSet<String>();//去重复排列集合 for (int i = 0; i < datas.size(); i++) { //去重复排列 if(sortCharacter.contains(datas.get(i))){ continue; }else{ sortCharacter.add(datas.get(i).toString()); } List newDatas = new ArrayList(datas); List newTarget = new ArrayList(target); newTarget.add(newDatas.get(i)); newDatas.remove(i); sort(newDatas, newTarget); } } public static void main(String[] args) { String[] datas = new String[] { "a", "b", "c", "d" }; sort(Arrays.asList(datas), new ArrayList()); System.out.println(set.size()); } }
参考实例: