package com.anuragkapur.misc;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Compute all combinations of the characters in the given string using
* recursion
*
* @author anuragkapur
*/
public class ComputeCombinationsRecursive {
private static List<String> computeCombinations(String input) {
List<String> combinations = new ArrayList<String>();
if (input.length() == 1) {
combinations.add(input);
combinations.add("");
} else {
char c = input.charAt(0);
String remaining = input.substring(1);
List<String> combinationsOfRemaining = computeCombinations(remaining);
for (Iterator<String> iterator = combinationsOfRemaining.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
combinations.add(string);
combinations.add(c + string);
}
}
return combinations;
}
/**
* @param args
*/
public static void main(String[] args) {
List<String> combinations = computeCombinations("abcd");
int count = 0;
for (Iterator<String> iterator = combinations.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println(++count + " :: " + string);
}
}
}