输出的所有排列组合不能在第三位和不能相邻 先看代码吧 import javautilArrayList; import javautilList; import javautilSet; import javautilTreeSet; /** * * @author 赵学庆 * */ public class T { public static List<String> find(List<String> list) { List<String> rtn = new ArrayList<String>(); String str; for (int i = ; i < listsize(); i++) { str = listget(i); listremove(i); if (listsize() == ) { rtnadd(str); } else { List<String> sList = find(list); for (String s : sList) { rtnadd(str + s); if (slength() == ) { addNumber(str + s); } } } listadd(i str); } return rtn; } public static void addNumber(String str) { if (strcharAt() == || ntains() || ntains()) { return; } setadd(str); } public static Set<String> set = new TreeSet<String>(); public static void main(String[] args) { List<String> list = new ArrayList<String>(); listadd(); listadd(); listadd(); listadd(); listadd(); listadd(); find(list); Systemoutprintln(setsize()); int cols = ; for (String s : set) { Systemoutprint(s+ ); if(cols==) { Systemoutprintln(); cols = ; } } } } import javautilArrayList; import javautilList; import javautilSet; import javautilTreeSet; /** * * @author 赵学庆 * */ public class T { public static List<String> find(List<String> list) { List<String> rtn = new ArrayList<String>(); String str; for (int i = ; i < listsize(); i++) { str = listget(i); listremove(i); if (listsize() == ) { rtnadd(str); } else { List<String> sList = find(list); for (String s : sList) { rtnadd(str + s); if (slength() == ) { addNumber(str + s); } } } listadd(i str); } return rtn; } public static void addNumber(String str) { if (strcharAt() == || ntains() || ntains()) { return; } setadd(str); } public static Set<String> set = new TreeSet<String>(); public static void main(String[] args) { List<String> list = new ArrayList<String>(); listadd(); listadd(); listadd(); listadd(); listadd(); listadd(); find(list); Systemoutprintln(setsize()); int cols = ; for (String s : set) { Systemoutprint(s+ ); if(cols==) { Systemoutprintln(); cols = ; } } } } 输出结果
网友提供的一个比较优化的算法 import javautilSet; import javautilTreeSet /** * 原始版本没有考虑重复问题我进行了修正<br> * 此算法的精华就是让一个字符串的所有位置都进行互换<br> * 这样就产生了所有可能出现的字符串 * * @author 赵学庆nicky_zs <A >></A> */ public class MyTest { public static void main(String args[]) { char[] number = new char[] { }; perm(number numberlength ); Systemoutprintln(setsize()); int cols = ; for (String s : set) { Systemoutprint(s + ); if (cols == ) { Systemoutprintln(); cols = ; } } } public static void addNumber(String str) { setadd(str); } public static Set<String> set = new TreeSet<String>(); public static void perm(char[] n int beg int end) { if (beg == end) { String result = StringvalueOf(n); if (n[] == ) return; if (ntains() || ntains()) return; addNumber(StringvalueOf(n)); return; } for (int i = beg; i <= end; ++i) { swap(n beg i); perm(n beg + end); swap(n beg i); } } public static int number = ; public static void swap(char[] n int a int b) { char temp = n[a]; n[a] = n[b]; n[b] = temp; } } |