算法:在一个集合中选取所有符合条件的元素组合
2015-05-02 17:04
477 查看
做了好几个题目都遇到题中的场景。于是写了个算法,元素组合条件是求和。
算法能适应的场景要求组合条件可以拆分的,有对应的逆运算。
代码实现的是取三个元素和在40~60之间的组合。循环n(testList.size())次可以获取所有符合条件的组合。
算法能适应的场景要求组合条件可以拆分的,有对应的逆运算。
代码实现的是取三个元素和在40~60之间的组合。循环n(testList.size())次可以获取所有符合条件的组合。
[code]import org.junit.Test; import java.util.ArrayList; import java.util.List; public class JunitTest { @Test public void test() throws InterruptedException { List<Integer> testList = new ArrayList<Integer>(); testList.add(5); testList.add(10); testList.add(15); testList.add(20); testList.add(25); testList.add(30); testList.add(35); System.out.println(select(40, 60, 3, testList)); } //递归选择指定个数 符合条件的所有组合 private List<List<Integer>> select(int min, int max, int count, List<Integer> resourceList) { if (count == 1) { return eligible(min, max, resourceList); } else { List<List<Integer>> rsList = new ArrayList<List<Integer>>(); Integer i = resourceList.remove(0); if (resourceList.size() >= count) { List<Integer> tmpList = new ArrayList<Integer>(resourceList); //去掉第一个元素 剩余元素中的组合 rsList.addAll(select(min, max, count, tmpList)); } //个数--,条件拆分 min - i, max - i rsList.addAll(assembly(i, select(min - i, max - i, --count, resourceList))); return rsList; } } //选择符合条件的结果 private List<List<Integer>> eligible(int min, int max, List<Integer> resourceList) { List<List<Integer>> rsList = new ArrayList<List<Integer>>(); for (Integer i : resourceList) { if (i >= min && i <= max) { List<Integer> tmp = new ArrayList<Integer>(); tmp.add(i); rsList.add(tmp); } } return rsList; } //组合 private List<List<Integer>> assembly(Integer base, List<List<Integer>> resourceList) { List<List<Integer>> rsList = new ArrayList<List<Integer>>(); for (List<Integer> list : resourceList) { list.add(base); rsList.add(list); } return rsList; } }
相关文章推荐
- 将所有符合条件的结果拼接成一列并用逗号隔开的一个sql语句
- 关于使用一条SQL语句 找出同时符合多个tag条件的记录集合算法
- 将所有符合条件的结果拼接成一列并用逗号隔开的一个sql语句
- 输出一个集合的所有子集(算法)
- 如何是获取一个文件夹里所有以.java结尾文件的数目,并把符合条件的文件名写到一个目录下。
- 输出一个集合的所有子集(算法)
- 输出一个集合的所有子集(算法)
- Foundation NSMutableArray遍历,选取出符合条件的所有对象
- 和SQL内连接不同,SQL外连接返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行,下面就为您详细介绍SQL外连接,
- 一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1
- 把所有符合条件的结果拼接成一列,用逗号隔开的一个sql语句。
- 求从几个集合中各选取一个元素,并组合的算法
- 算法题:求从n个数组任意选取一个元素的所有组合
- 算法作业:求一个集合中所有子集元素之和
- leetcode-java.T015_3Sum---给定一个n个元素的数组,是否存在a,b,c三个元素,使用得a+b+c=0,找出所有符合这个条件的三元组
- 将所有符合条件的结果拼接成一列并用逗号隔开的一个sql语句
- js的一个选择数组中所有符合条件的元素并删除的方法
- 一个数组中寻找所有三个符合条件的数
- 给定一个集合,求出其所有子集合
- Salesforce 找出String中所有符合条件的SubString