package com.anuragkapur.ctci.recursionanddp; import java.util.ArrayList; import java.util.List; /** * @author anuragkapur */ public class Prob9_5_StringPermutations { /** * Run time complexity: O(n * n!) * T(n) = (T(n-1) + (n-1)!) * n * * @param str * @return */ public List<String> getPermutations(String str) { List<String> permutations = new ArrayList<>(); if (str.length() == 1) { permutations.add(str); return permutations; } char chars[] = str.toCharArray(); for(int i=0; i<chars.length; i++) { char ch = chars[i]; StringBuilder subBuilder = new StringBuilder(); for(int j=0; j<chars.length; j++) { if(j != i) { subBuilder.append(chars[j]); } } List<String> subPerms = getPermutations(subBuilder.toString()); for(String subPerm : subPerms) { permutations.add(String.valueOf(ch) + subPerm); } } return permutations; } }