LeetCode-77 Combinations(组合)
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], ]
分析:递归,回溯的思想。
PS:list传进函数内部时,因为底层是数组,所以也是传地址,所以函数体内的操作对其值的改变有效。
public class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> llist = new ArrayList<List<Integer>>();
List<Integer> list = new ArrayList<Integer>();
comeback(1,n,k,list,llist);
return llist;
}
static void comeback(int temp, int n, int k,List<Integer> list,List<List<Integer>> llist){
if (list.size() == k) {
llist.add(new ArrayList<Integer>(list));//这里必须是new一个。如果直接是list的话会发现最后是空的,因为list最后都被清空了。
return;
}
for (int i = temp; i <= n; i++) {
list.add(i);
comeback(i+1,n,k,list,llist);
list.remove(list.size()-1);
}
}
}
Runtime: 285 ms