package com.anuragkapur.pie.recursion;
import java.util.ArrayList;
import java.util.List;
/**
* @author anuragkapur
*/
public class Combinations {
public List<String> combine(String str) {
if (str == null) {
return null;
}
CombinationsComputer combinationsComputer = new CombinationsComputer(str);
combinationsComputer.combine(0);
return combinationsComputer.getCombinations();
}
private class CombinationsComputer {
private String input;
private StringBuilder combination;
private List<String> combinations;
public CombinationsComputer(String str) {
this.combination = new StringBuilder();
this.input = str;
this.combinations = new ArrayList<>();
combinations.add("");
}
public void combine(int start) {
for (int i=start; i<input.length(); i++) {
combination.append(input.charAt(i));
combinations.add(combination.toString());
combine(i+1);
combination.setLength(combination.length()-1);
}
}
public List<String> getCombinations() {
return this.combinations;
}
}
}