import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @param k int整型 
     * @return int整型二维数组
     */
    public static ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();;
    public int[][] combine (int n, int k) {
        // write code here
        search(1,k,n,new ArrayList<>());
        int[][] arr = new int[lists.size()][k];
        for(int i=0;i<lists.size();i++){
            for(int j=0;j<lists.get(i).size();j++) {
                arr[i][j] = lists.get(i).get(j);
            }
        }
        return arr;
    }

    public void search(int cur,int capacity,int n,ArrayList<Integer> list){
        if(list.size()==capacity){
            lists.add(new ArrayList<>(list));
            return;
        }
        if(cur > n){
            return;
        }
        list.add(cur);
        search(cur+1,capacity,n,list);
        list.remove(list.size()-1);
        search(cur+1,capacity,n,list);
    }

}

本题主要考察的是二叉树的建立,所用语言为java,利用递归算法建立二叉树,跟之前的括号生成题目类似,只不过比之前括号生成题目多了一个参数,所以只需要在上题的基础上进行修改,多增加一个相应的参数。