把一个N位的数组,每M个组成一组新的数组,内容不重复.
M<=N
这个排列组合问题用java迭代或者别的什么方法怎么解决。
困扰我一天了。
把一个N位的数组,每M个组成一组新的数组,内容不重复.
M<=N
这个排列组合问题用java迭代或者别的什么方法怎么解决。
困扰我一天了。
public void permutation(List<int[]> result, int[] arr, int index, int num){ if (index == num){ int[] newArr = new int[num]; System.arraycopy(arr, 0, newArr, 0, num); result.add(newArr); return; } for (int i = index; i < arr.length; i++) { swap(arr, index, i); permutation(result, arr, index + 1, num); swap(arr, index, i); } } private void swap(int arr[], int i, int j){ if(i != j){ arr[i] ^= arr[j]; arr[j] ^= arr[i]; arr[i] ^= arr[j]; } } @Test public void testPermutation() throws Exception { int[] arr = {1, 2, 3, 4, 5, 6, 7, 8}; List<int[]> result = new ArrayList<>(); permutation(result, arr, 0, 2);//从arr中取两个元素排列(即N=8,M=2) System.out.println(result.size()); for (int[] is : result) { System.out.println(Arrays.toString(is)); } }
认为简单的方式可以归结为一个递归的问题,算法:
计算(已经包含的元素initSet,数组N,检索的起点s,需要枚举的数量M)
如果M=1 则 //initSet只需要添加一个元素即可,那么此时只需要枚举后面的元素加入 集合即为最终的结果;
for j = s to N.size
R = initSet + N[j];
输出结果R;
否则 //分别将起点S到N末尾的每个元素作为集合的必选项,加入集合,然后M-1
initSet += s;
for j = s to N.size - 1
计算(initSet,j,M-1)
结束。
初始调用: 计算(EmptySet,数组N,起点0,M具体值)
相关推荐
(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考); 先给初学者解释一下什么叫数组去重(老鸟跳过):意思就是讲数组里面重复的元素...
编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串 ""。 Valid Parentheses(有效的括号) 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串...
条件是一个boolean类型的数据,如果条件结果为true,则执行表达式1的内容,并将表达式1的结果作为整体表达式的结果。如果条件为false,则执行表达式2的内容,并将表达式2的结果作为整体表达式的结果 ex: var age ...
问题:将两个已排序数组合并成一个排序数组 这里先不考虑大数据量的情况(在数据量很大时不知大家有什么好的思路或方法?),只做简单数组的处理。 简单代码如下: 说明:之所以把merge函数定义成返回数组长度,是因为...
1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...
1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg) 从 我 做 起 振 我 做 起 振 兴 做 起 振 兴 中 起 振 兴 中 华 比赛时,先站在左上角的写着“从”字的格子里,可以横向...
1.6.3. 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数 位于数组的后半部分 ...........................................................130 1.6.4. 给定链表的头指针和一个...
9.8 为什么用const说明的常量不能用来定义一个数组的初始大小? 9.9 字符串和数组有什么不同? 第10章 位(bit)和字节(byte) 10.1 用什么方法存储标志(flag)效率最高? 10.2 什么是“位屏蔽(bit masking)”...
缺失的第一个正数 困难 46 全排列 中等 48 旋转图像 中等 70 爬楼梯 简单 74 搜索二维矩阵 中等 75 颜色分类 中等 77 组合 中等 78 子集 中等 83 删除排序链表中的重复元素 简单 94 二叉树的中序遍历 中等 98 验证...
(此实现仅对集合ID有用,但是现在我正在尝试使用它,我想您也可以通过具有一个包含多个数组的对象或一个数组数组来创建一个顺序的版本就像在此实现中一样,并编写一些函数以支持对其进行迭代,以便普通的连续数组...
<br>实验四 综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素...
9.8. 为什么用const说明的常量不能用来定义一个数组的初始大小? 145 9.9. 字符串和数组有什么不同? 145 第10章 位(bit)和字节(byte) 147 10.1. 用什么方法存储标志(flag)效率最高? 147 10.2. 什么是“位屏蔽(bit ...
写一个函数,例如:给你的 a b c 则输出 abc acb bac bca cab cba import java.util.ArrayList; import java.util.List; public class NumTest { public static void main(String[] args) { String s="ABCD";...
SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。...
为了计算上的方便,一组变量最好给一个数组名。例如A={A1:C3}、B={E1:G3}等。数组名的设置步骤是:选定数组域,单击“插入”菜单,选择“名称”项中的“定义”命令,输入数组名,单击“确定”按钮即可。更简单的...
对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。 二、功能要求: 1、本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称...