classSolution{ //用于存放结果的链表 List<List<Integer>> result = new LinkedList<>();
public List<List<Integer>> combine(int n, int k) { //用于临时存放满足条件的数组 LinkedList<Integer> track = new LinkedList<>(); if (k <= 0 || n < k) { return result; } backtrack(n, k, 1, track, result); return result; }
voidbacktrack(int n, int k, int begin, LinkedList<Integer> track, List<List<Integer>> result){ //触发结束条件,即如果当前临时数组的长度满足要求直接存储并返回 if (track.size() == k) { result.add(new LinkedList<>(track)); return; }
for (int i = start; i <= n; i++) { //将track中未出现的元素加入 track.add(i); backtrack(n, k, i + 1, track, result); //剔除最后一个元素,尝试下一个不同的元素 track.removeLast(); } } }