標籤:private reac .com AC ret stl clear single select
code:
import org.assertj.core.util.Lists;import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * 52523243 * * @param <E> */public class Combine<E> { private List<List<E>> resList = Lists.newArrayList(); public List<List<E>> combine(List<E> srcList, int require) { resList.clear(); if (require < 0) { throw new IllegalArgumentException(""); } if (srcList == null || srcList.size() == 0) { return Lists.newArrayList(); } if (require == 1) { srcList.forEach(src -> resList.add(Collections.singletonList(src))); return resList; } if (require == srcList.size()) { return resList = Collections.singletonList(srcList); } combinerSelect(srcList, new ArrayList<>(), srcList.size(), require); return resList; } private void combinerSelect(List<E> srcList, List<E> workSpace, int n, int require) { List<E> copyData; List<E> copyWorkSpace; if (workSpace.size() == require) { List<E> newL = Lists.newArrayList(); newL.addAll(workSpace); resList.add(newL); } for (int i = 0; i < srcList.size(); i++) { copyData = new ArrayList<>(srcList); copyWorkSpace = new ArrayList<>(workSpace); copyWorkSpace.add(copyData.get(i)); for (int j = i; j >= 0; j--) { copyData.remove(j); } combinerSelect(copyData, copyWorkSpace, n, require); } }}
test:
import com.y.Combine;import org.assertj.core.util.Lists;import org.junit.Test;import java.util.List;public class CombineTest { @Test public void test_combine() { Combine<String> combine = new Combine<>(); List<String> testList = Lists.newArrayList("a", "b", "c", "d", "e"); List<List<String>> res = combine.combine(null, 3); System.out.println(res); res = combine.combine(Lists.newArrayList(), 3); System.out.println(res); res = combine.combine(testList, 1); System.out.println(res); res = combine.combine(testList, 3); System.out.println(res); res = combine.combine(testList, 5); System.out.println(res);// res = combine.combine(testList, -1);// System.out.println(res); }}
演算法-Java組合