题目:
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
解决办法:
package test;
import java.util.ArrayList;
import java.util.List;
public class LC77Try1
{
public List<List<Integer>> combine(int n, int k)
{
List<List<Integer>> ret = new ArrayList<List<Integer>>();
if (k > n)
{
return ret;
}
List<Integer> list = new ArrayList<Integer>();
getpass(n, k, list, ret, 1);
return ret;
}
public void getpass(int n, int k, List<Integer> list,
List<List<Integer>> ret, int start)
{
if (list.size() == k)
{
ret.add(new ArrayList<Integer>(list));
return;
}
int len = list.size();
for (int i = start; i <= n; i++)
{
//加上下面着一个判断语句,速度就提高了很多,嘿嘿
if (n - i < (k - len-1))
{
return;
}
list.add(i);
getpass(n, k, list, ret, i + 1);
list.remove(list.size() - 1);
}
}
public static void main(String[] args)
{
LC77Try1 t = new LC77Try1();
List<List<Integer>> ret = t.combine(4, 3);
for (int i = 0; i < ret.size(); i++)
{
List<Integer> list = ret.get(i);
for (int j = 0; j < list.size(); j++)
{
System.out.print(list.get(j) + " , ");
}
System.out.println(" ");
}
}
}
哈哈