分类: Java
2015-03-20 15:28:48
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], ]
思路:
针对每一个数字都作为第一个进行遍历,然后向后遍历下一个可能有,也有可能没有的。
public List> combine(int n, int k) { List
> result=new ArrayList(); if(n<=0&&k<=0&&k>n)
//返回空的链表也不要返回null return Collections.emptyList(); for(int e=1;e<=n;e++){ Listelement=new ArrayList(); element.add(e); recurTraverse(n,k-1,e+1,result,element); } return result; } private void recurTraverse(int n, int i, int j, List > result, List
element) { // TODO 自动生成的方法存根 if(0==i){ result.add(element); return; } if(j>n) return;
//保留当前的element值,给有这个值用 Listtemp=new ArrayList(element); recurTraverse(n, i, j+1, result, element); temp.add(j); recurTraverse(n,i-1,j+1,result,temp); }