import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param k int整型
* @return int整型二维数组
*/
private List<List<Integer>> ve = new ArrayList<>();
private List<Integer> pa = new ArrayList<>();
private int[] s = new int[100];
private void dfs(int u, int n, int k) {
int l = pa.size();
if (k == l) {
ve.add(new ArrayList<>(pa));
return;
}
for (int i = u; i <= n; ++i) {
if (s[i] == 0) {
s[i] = 1;
pa.add(i);
dfs(i + 1, n, k);
pa.remove(pa.size() - 1);
s[i] = 0;
}
}
}
public int[][] combine(int n, int k) {
dfs(1, n, k);
int[][] result = new int[ve.size()][k];
for (int i = 0; i < ve.size(); i++) {
for (int j = 0; j < k; j++) {
result[i][j] = ve.get(i).get(j);
}
}
return result;
}
}
编程语言为Java。
该题考察的知识点是回溯算法,用于生成组合。
代码的文字解释大纲如下:
- 在
combine方法中,创建一个空的二维整型列表result,用于存储生成的组合。 - 调用私有方法
backtrack,传入初始参数和结果列表,开始回溯过程。 - 在
backtrack方法中,判断结果列表长度是否等于k。如果是,则将结果列表添加到result中并返回。 - 使用循环遍历从start开始到n的所有数字。
- 将当前数字加入结果列表。
- 递归调用
backtrack方法,传入下一个数字和结果列表。 - 将当前数字从结果列表中移除。
- 返回Solution类中的其他方法或变量。

京公网安备 11010502036488号