public List<List<Integer>> combine(int n, int k) { List<List<Integer>> result = newArrayList<>(); backtrack(result, newArrayList<>(), 1, n, k); return result; }
privatevoidbacktrack(List<List<Integer>> result, List<Integer> path, int start, int n, int k) { if (path.size() == k) { result.add(newArrayList<>(path)); return; } for (inti= start; i <= n; i++) { path.add(i); backtrack(result, path, i + 1, n, k); path.remove(path.size() - 1); } }
2.3 子集(LeetCode 78)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> result = newArrayList<>(); backtrack(result, newArrayList<>(), nums, 0); return result; }
privatevoidbacktrack(List<List<Integer>> result, List<Integer> path, int[] nums, int start) { result.add(newArrayList<>(path)); for (inti= start; i < nums.length; i++) { path.add(nums[i]); backtrack(result, path, nums, i + 1); path.remove(path.size() - 1); } }