题目大意:
给一个正整数列表alist和指定正整数T,每个数只能用一次,返回两元素相加之和等于指定数的所有组合的链表。形如:alist = [1,2,3,4,4,,5,6,7] T = 8 ,返回链表[[1,7],[2,6],[3,5],[4,4]].
思路:
遍历一遍链表,利用Set集合元素的唯一性,记录中间处理过程。
代码实现:
**
* @author lm
* @create 2018-03-28 10:20
* @desc 返回整形列表中所有元素相加之和等于目标值的元素列表
**/
public class GettingList {
public List<ArrayList<Integer>> getList(List<Integer> list, int target) {
List<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
Set<Integer> set = new HashSet<>();
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
ArrayList<Integer> subList = new ArrayList<>();
int temp = iterator.next();
if (temp == target) {
subList.add(temp);
}else if (set.contains(target - temp)) {
subList.add(temp);
subList.add(target - temp);
}
set.add(temp);
if (subList.size() != 0) {
lists.add(subList);
}
}
return lists;
}
}
//测试用例
public class GettingListTest {
@Test
public void getList() throws Exception {
GettingList gettingList = new GettingList();
ArrayList<Integer> lists = new ArrayList<>();
lists.add(1);
lists.add(3);
lists.add(5);
lists.add(4);
lists.add(2);
lists.add(7);
lists.add(6);
lists.add(4);
int target = 8;
assertEquals(4, gettingList.getList(lists, target).size());
}
}
要点:
【1】利用Set集合中元素唯一性的特点,
【2】集合的嵌套的声明及实例化(泛型参数要一致)。