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();
}
}
}
京公网安备 11010502036488号