77. 组合
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

示例:

输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
解题思路
和子集问题一样,只不过这里有结束条件,也就是我们只要长度为k的子集
还是回溯算法解答
图片说明

class Solution {
    List<List<Integer>> res=new LinkedList<>();
    public List<List<Integer>> combine(int n, int k) {
        if( k<=0 || n<=0 ) return res;
        LinkedList<Integer> track=new LinkedList<>();
        backtrack(track,n,k,1);
        return res;
    }

    public void backtrack(LinkedList<Integer> track,int n,int k,int start){
        if(track.size()==k){//k个则满足条件
            res.add(new LinkedList(track));
        }
        //和子集的区别是结束条件不同,和排列的区别是一个排除重复元素,一个排除前边的元素
        for(int i=start;i<=n;i++){
            track.add(i);
            backtrack(track,n,k,i+1);
            track.removeLast();
        }
    }
}