0

So I'm using the classic algorithm for permutations which is

private static void permutation(String prefix, String str) { int n = str.length(); if (n == 0) System.out.println(prefix); else { for (int i = 0; i < n; i++) permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n)); } } 

The only thing I can't figure out how to do is how to store the permutations into an array instead of just printing them out. Any help is appreciated.

2 Answers 2

1

Try this method. This will return list of permutations

private static List<String> permutation(String prefix, String str) { List<String> permutations = new ArrayList<>(); int n = str.length(); if (n == 0) { permutations.add(prefix); } else { for (int i = 0; i < n; i++) permutations.addAll(permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n))); } return permutations; } 

Using Arrays. JAVA 8 needed

private static String[] permutation(String prefix, String str) { String[] permutation = new String[]{}; int n = str.length(); if (n == 0) { permutation = new String[]{prefix}; } else { for (int i = 0; i < n; i++) permutation = Stream.concat(Arrays.stream(permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n))), Arrays.stream(permutation)).toArray(String[]::new); } return permutation; } 
Sign up to request clarification or add additional context in comments.

Comments

0

You could also just pass a reference of the list of permutations to the permutation method itself. This has the advantage of only creating one list.

private static List<String> permutation(String str) { List<String> perms = new ArrayList<>(); permutation("", str, perms); return perms; } private static void permutation(String prefix, String str, List<String> perms) { int n = str.length(); if ( n == 0 ) { perms.add(prefix); } else { for ( int i = 0; i < n; i++ ) permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1,n), perms); } } List<String> perms = permutation("abcd"); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.