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], ]Java代码:
public static List<List<Integer>> combine(int n, int k) {
List<List> result = new LinkedList<List>();
if (n < k || k == 0 || n == 0)
return null;
return combineUTL(1, n, k);
}
public static List<List<Integer>> combineUTL(int start, int end, int k) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
if (start > end || k == 0 || end - start + 1 < k)
return null;
if (end - start + 1 == k) {
List<Integer> list_over = new ArrayList<>();
for (int i = start; i <= end; i++)
list_over.add(i);
list.add(list_over);
} else {
List<List<Integer>> list_1 = combineUTL(start + 1, end, k - 1);
if (null != list_1) {
for (List<Integer> list_tmp : list_1) {
list_tmp.add(0, start);
}
} else {
if (k - 1 == 0) {
list_1 = new ArrayList<List<Integer>>();
List<Integer> list_tmp = new ArrayList<>();
list_tmp.add(start);
list_1.add(list_tmp);
}
}
List<List<Integer>> list_2 = combineUTL(start + 1, end, k);
if (null != list_1)
list.addAll(list_1);
if (null != list_2)
list.addAll(list_2);
}
return list;
}
public static void main(String[] arqs) {
List<List<Integer>> result = combine(4, 2);
for (List<Integer> list : result) {
System.out.print("{");
for (Integer i : list) {
System.out.print(i + ",");
}
System.out.print("}\n");
}
}
public static List<List<Integer>> combine(int n, int k) {
List<List> result = new LinkedList<List>();
if (n < k || k == 0 || n == 0)
return null;
return combineUTL(1, n, k);
}
public static List<List<Integer>> combineUTL(int start, int end, int k) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
if (start > end || k == 0 || end - start + 1 < k)
return null;
if (end - start + 1 == k) {
List<Integer> list_over = new ArrayList<>();
for (int i = start; i <= end; i++)
list_over.add(i);
list.add(list_over);
} else {
List<List<Integer>> list_1 = combineUTL(start + 1, end, k - 1);
if (null != list_1) {
for (List<Integer> list_tmp : list_1) {
list_tmp.add(0, start);
}
} else {
if (k - 1 == 0) {
list_1 = new ArrayList<List<Integer>>();
List<Integer> list_tmp = new ArrayList<>();
list_tmp.add(start);
list_1.add(list_tmp);
}
}
List<List<Integer>> list_2 = combineUTL(start + 1, end, k);
if (null != list_1)
list.addAll(list_1);
if (null != list_2)
list.addAll(list_2);
}
return list;
}
public static void main(String[] arqs) {
List<List<Integer>> result = combine(4, 2);
for (List<Integer> list : result) {
System.out.print("{");
for (Integer i : list) {
System.out.print(i + ",");
}
System.out.print("}\n");
}
}