static List<List<Integer>> combination(List<Integer> list, List<Integer> result, int depth) {
List<List<Integer>> r = new ArrayList<>();
if (result.size() == depth) {
r.add(result);
return r;
}
for (int i = 0; i < list.size(); i++) {
List<Integer> n_list = new ArrayList<>(list.stream().skip(i + 1).collect(Collectors.toList()));
List<Integer> n_result = new ArrayList<>(result.stream().collect(Collectors.toList()));
n_result.add(list.get(i));
List<List<Integer>> rr = combination(n_list, n_result, depth);
for (List<Integer> rrr : rr) {
r.add(rrr);
}
}
return r;
}
list slice 복사 : list.stream().skip(i + 1).collect(Collectors.toList());
앞에서부터 skip 개수만큼 건너뛴다. 마지막 변환을 stream().toList()
로 가능한데 8은 안됨으로 Collectors
사용
add가능한 list를 위해 new ArrayList<>()
로 만든다.
Integer[] n_nums = Arrays.stream(nums).boxed().toArray(Integer[]::new);
위 코드는 기존에 posting한 적 있지만 기억하자는 의미로
int sum = rr.stream().mapToInt(Integer::intValue).sum();