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], ]Java:
照猫画虎:
public class Solution {
public List<List<Integer>> combine(int n, int k) {
if(n<=0 || k==0|| n<k) return null;
List<List<Integer>> res= new ArrayList<List<Integer>>();
ArrayList<Integer> item= new ArrayList<Integer>();
int start=1;
help(n,k,item,res,start);
return res;
}
private void help(int n, int k, ArrayList<Integer> item, List<List<Integer>> res,int start)
{
if(item.size()==k)
{
res.add(new ArrayList<Integer>(item));
return;
}
else{
for(int i=start;i<=n;i++)
{
item.add(i);
help(n,k,item,res,i+1);
item.remove(item.size()-1);
}
}
}
}
1. 征服代码:http://blog.youkuaiyun.com/linhuanmars/article/details/21260217
就是喜欢NP 不用算时间复杂度
public ArrayList<ArrayList<Integer>> combine(int n, int k) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if(n<=0 || n<k)
return res;
helper(n,k,1,new ArrayList<Integer>(), res);
return res;
}
private void helper(int n, int k, int start, ArrayList<Integer> item, ArrayList<ArrayList<Integer>> res)
{
if(item.size()==k)
{
res.add(new ArrayList<Integer>(item));
return;
}
for(int i=start;i<=n;i++)
{
item.add(i);
helper(n,k,i+1,item,res);
item.remove(item.size()-1);
}
}
2.伪技大神:http://blog.youkuaiyun.com/u010500263/article/details/18435495
public class Solution {
public ArrayList<ArrayList<Integer>> combine(int n, int k) {
ArrayList<ArrayList<Integer>> combSet = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> comb = new ArrayList<Integer>();
if(n<k) return combSet;
helper(n, k, combSet, comb, 1);
return combSet;
}
public void helper(int n, int k, ArrayList<ArrayList<Integer>> combSet, ArrayList<Integer> comb, int start){
// one possible combinition constructured
if(comb.size() == k){
combSet.add(new ArrayList<Integer> (comb));
return;
}
else{
for(int i=start; i<=n; i++){// try each possibility number in current position
comb.add(i);
helper(n, k, combSet, comb, i+1); // after selecting number for current position, process next position
comb.remove(comb.size()-1); // clear the current position to try next possible number
}
}
}
}