In this article, we will learn to resolve the Find All Subsets problem in Java by using a backtracking algorithm
Problem
Given an array a
, find all its subsets
Example
Array [1, 2, 3]
will have the following subsets
[]
[1]
[1, 2]
[1, 2, 3]
[1, 3]
[2]
[2, 3]
[3]
Backtracking Approach
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class BackTracking_FindAllSubsets {
List<LinkedList<Integer>> result = new ArrayList<>();
void printSubsets() {
for (LinkedList<Integer> subset : result) {
System.out.println(String.valueOf(subset));
}
}
void enumerate(int[] a, int startIndex, LinkedList<Integer> currentSubset) {
result.add(new LinkedList<>(currentSubset));
for (int i = startIndex; i < a.length; i++) {
currentSubset.addLast(a[i]);
enumerate(a, i + 1, currentSubset);
currentSubset.removeLast(); // backtracking
}
}
public static void main(String[] args) {
int[] a = {1, 2, 3};
BackTracking_FindAllSubsets findAllSubsets = new BackTracking_FindAllSubsets();
findAllSubsets.enumerate(a, 0, new LinkedList<>());
findAllSubsets.printSubsets();
}
}