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。

该题考察的知识点是回溯算法,用于生成组合。

代码的文字解释大纲如下:

  1. combine方法中,创建一个空的二维整型列表result,用于存储生成的组合。
  2. 调用私有方法backtrack,传入初始参数和结果列表,开始回溯过程。
  3. backtrack方法中,判断结果列表长度是否等于k。如果是,则将结果列表添加到result中并返回。
  4. 使用循环遍历从start开始到n的所有数字。
  5. 将当前数字加入结果列表。
  6. 递归调用backtrack方法,传入下一个数字和结果列表。
  7. 将当前数字从结果列表中移除。
  8. 返回Solution类中的其他方法或变量。