递归求解从数组中取出n个元素的所有组合
2017-09-25 22:46
597 查看
递归求解从数组中取出n个元素的所有组合
问题:
如数组为{1, 2, 3, 4, 5, 6},那么从它中取出3个元素的组合有哪些,取出4个元素的组合呢?
比如取3个元素的组合,我们的思维是:
取1、2,然后再分别取3,4,5,6;
取1、3,然后再分别取4,5,6;
......
取2、3,然后再分别取4,5,5;
......
基本思路:
1.先从数组中A取出一个元素,然后再从余下的元素B中取出一个元素,然后又在余下的元素C中取出一个元素
2.按照数组索引从小到大依次取,避免重复
依照上面的递归原则,我们可以设计如下的算法,按照索引从小到大遍历:
package recursion; /** * 数组的指定位数的排列组合 * @author linziyu * */ public class P1 { //arr为原始数组 //start为遍历起始位置 //result保存结果,为一维数组 //count为result数组的索引值,起辅助作用 //NUM为要选取的元素个数 //arr_len为原始数组的长度,为定值 public void combine_increase(int[] arr, int start, int[] result, int count, int NUM, int arr_len) { int i = 0; for (i = start; i < arr_len + 1 - count; i++) { result[count - 1] = i; if (count - 1 == 0) { int j; for (j = NUM - 1; j >= 0; j--)//倒过来输出 System.out.printf("%d\t",arr[result[j]]); System.out.println(""); } else{ combine_increase(arr, i + 1, result, count - 1, NUM, arr_len); } } } public static void main(String[] args) { int[] arr = {1,2,3,4,5}; int[] result = new int[100]; P1 p1 = new P1(); p1.combine_increase(arr, 0, result, 3,3 ,arr.length); } }
相关文章推荐
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 【算法-分治】从数组中取出n个元素的所有组合(需要深入理解递归)
- 从数组中取出n个元素的所有组合(递归实现)
- 输出数组的所有元素的排列组合(递归)
- 多个数组间元素排列组合问题求解(Java实现) 标签: 递归排列组合循环
- 递归求解一组元素的所有排列情况&包含m个元素的组合情况&网易笔试题-合唱团
- 递归列举从数组b()中选出某些元素(允许重复)使其和等于num的所有组合
- 递归列举从数组b()中选出某些元素(允许重复)使其和等于num的所有组合
- java实现 数组中两个元素相加等于指定数的所有组合
- 一个简单的递归实现数组组元素的组合
- php求数组全排列,元素所有组合的方法
- 【C++】求数组中所有元素的排列或组合
- 给定一个数组,求数组中所有元素的可能组合(每个元素只出现一次),使其和等于给定数的解决办法