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类中的其他方法或变量。