题目:
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
For example,
If n = 4 and k = 2, a solution is:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
题意:
给定两个整数n和k,返回1…n。
这题与subsets ,subsets-ii 都差不多,使用回溯法来解决。
思路都差不多,就直接套用那个套路就行,这里主要讲下回溯的时候 k的变化
首先是回溯边界的确定,这里是通过判断k来决定的
k = 0,表示当前数字 已经找到k个数字的组合,这时候就需要把其添加到大集合里面,然后跳出当前数,执行下一个数
k > 0,继续执行,知道k==0 为止
每次回溯的时候k都要减1,因为总共取k个,取了1个,就只能在剩下的k-1里面取了
其他的都差不多
下面给出代码:
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
public ArrayList<ArrayList<Integer>> combine(int n, int k) {
ArrayList<Integer> temp = new ArrayList<Integer> ();
helper(n,k,1,temp);
return list;
}
public void helper(int n, int k, int start, ArrayList<Integer> temp) {
if( k == 0) {
list.add(new ArrayList<Integer>(temp));
return;
}
else {
for(int i = start; i <= n;i++) {
temp.add(i);
helper(n,k-1,i+1,temp);
temp.remove(temp.size()-1);
}
}
}
public static void main(String[] args) {
}