Dados dos enteros n y k, devuelve todas las combinaciones posibles de k números de 1 … n.
Por ejemplo, si n = 4 y k = 2, una solución es:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
Solución Java
public ArrayList<ArrayList<Integer>> combine(int n, int k) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); if (n <= 0 || n < k) return result; ArrayList<Integer> item = new ArrayList<Integer>(); dfs(n, k, 1, item, result); // because it need to begin from 1 return result; } private void dfs(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); dfs(n, k, i + 1, item, res); item.remove(item.size() - 1); } } |