Для не очень сложного сценария я использую счетчик.
public class Combination {
private static int count;
public static void main(String[] args) {
String[] inputs = new String[] {"12345", "1234", "123", "12", "1"};
for(String input : inputs){
count = 0;
System.out.print("output for " + input + " is:");
combination(input);
System.out.println("\nCount for input:" + input + " is " + count);
}
}
private static void combination(String input) {
combination("", input);
}
private static void combination(String prefix, String input) {
System.out.print(prefix + " ");
count++;
int n = input.length();
for(int i = 0; i < n; i++){
combination(prefix + input.charAt(i), input.substring(i + 1));
}
}
}
Решение действительно O (2 ^ n)