蓝桥杯——说好的进阶之去重复元素的排列组合

来源:互联网 发布:深圳云计算产业协会 编辑:程序博客网 时间:2024/06/06 01:49

将待排列(组合)的数组,先分别统计出种类和个数,然后进行避免重复的排列(组合)。

/* 1,1,2,3的排列组合 去重复 * (借此复习排列组合) *  * 1:2 2个1 * 2:1 1个2 * 3:1 1个3 *  * */static int[] iarr = new int[3];//目标序列static int[] carr = new int[] { 1, 2, 3 };//3种itemstatic int[] used = new int[] { 2, 1, 1 };//每种item有几个可用public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("不重复的排列:");dfs(0);System.out.println("不重复的组合:(字典序)");cal(0, 0);}static void dfs(int p) {if (p == 3) {// findfor (int i : iarr) {System.out.print(i + "");}System.out.println();} else {for (int i = 0; i < used.length; i++) {if (used[i] > 0) {used[i]--;iarr[p] = carr[i];dfs(p + 1);used[i]++;}}}}static void cal(int p, int j) {if (p == 3) {// findfor (int i : iarr) {System.out.print(i + "");}System.out.println();} else {for (; j < used.length; j++) {if (used[j] > 0) {used[j]--;iarr[p] = carr[j];cal(p + 1, j);used[j]++;}}}}


0 0