【题目描述】

给定两个整数 ​​n​​​ 和 ​​k​​​,返回范围 ​​[1, n]​​​ 中所有可能的 ​​k​​ 个数的组合。

你可以按 任何顺序 返回答案。

​https://leetcode.cn/problems/combinations/​


【示例】

【LeeCode】77. 组合_LeeCode


【代码】admin

回溯剪枝法

package com.company;
import java.util.*;
import java.util.stream.Collectors;

// 2022-12-26

class Solution {
List<List<Integer>> res = new LinkedList<>();
public List<List<Integer>> combine(int n, int k) {
LinkedList<Integer> list = new LinkedList<>();
backtrace(n, k, 1, list);
for (List<Integer> re : res) {
System.out.println(re);
}
return res;
}

private void backtrace(int n, int k, int index, LinkedList<Integer> list) {
if (list.size() == k){
res.add(new LinkedList<>(list));
return;
}
for (int i = index; i <= n; i++) {
list.add(i);
// 这里的下标都要用i
backtrace(n, k, i + 1, list);
list.removeLast();
}
}
}
public class Test{
public static void main(String[] args) {
int n = 4;
int k = 3;
new Solution().combine(n, k);
System.out.println("--------------------------------");
int n0 = 4;
int k0 = 2;
System.out.println("--------------------------------");
new Solution().combine(n0, k0);
System.out.println("--------------------------------");
int n1 = 2;
int k1 = 1;
new Solution().combine(n1, k1);
System.out.println("--------------------------------");
int n2 = 3;
int k2 = 3;
new Solution().combine(n2, k2);
System.out.println("--------------------------------");
}
}


【代码】admin

1226 本想用  迭代 来计算, 后面发现比较复杂, 尤其是 k = 1 的情况  暂时搁置吧