JAVA排列组合算法

来源:互联网 发布:东南大学seu网络登录 编辑:程序博客网 时间:2024/05/16 19:50
import java.util.ArrayList;import java.util.List;public class Combination {public static void main(String[] args) {char[] c = new char[] { '1', '2', '2', '3', '4', '5' };List<String> list = new ArrayList<String>();comb(c, list, 0, c.length);for (String str : list) {System.out.println(str);}}private static void comb(char[] array, List<String> list, int k, int n) {if (n == k) {if (array[2] != '4') {// 第三个位置不能出现4String str = new String(array);if (str.indexOf("53") < 0 && str.indexOf("35") < 0) {// 3,5不能连续出现list.add(str);}}} else {for (int i = k; i < n; i++) {swap(array, k, i);comb(array, list, k + 1, n);swap(array, k, i);}}}private static void swap(char[] a, int x, int y) {char temp = a[x];a[x] = a[y];a[y] = temp;}}

该算法的巧妙之处在于始终都只用了 char[] c 一个数组,在排序过程中将其排序结果存储后,char[] c 的顺序进行还原再排列组合。

原创粉丝点击