先记录代码,回头写分析
Combinations
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if (n < k) {
return res;
}
List<Integer> item = new ArrayList<Integer>();
helper(n, k, res, item, 1);
return res;
}
public void helper(int n, int k, List<List<Integer>> res, List<Integer> item, int start) {
if (item.size() == k) {
res.add(new ArrayList<Integer>(item));
return;
}
for (int i = start; i <= n; i++) {
item.add(i);
helper(n, k, res, item, i + 1);
item.remove(item.size() - 1);
}
}
Permutations
public List<List<Integer>> permute(int[] num) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if (num == null) {
return res;
}
List<Integer> item = new ArrayList<Integer>();
boolean[] visited = new boolean[num.length];
helper(num, res, item, visited);
return res;
}
public void helper(int[] num, List<List<Integer>> res, List<Integer> item, boolean[] visited) {
if (item.size() == num.length) {
res.add(new ArrayList<Integer>(item));
return;
}
for (int i = 0; i < num.length; i++) {
if (!visited[i]) {
item.add(num[i]);
visited[i] = true;
helper(num, res, item, visited);
visited[i] = false;
item.remove(item.size() - 1);
}
}
}