Generating all permutations of a certain length

后端 未结 3 668
-上瘾入骨i
-上瘾入骨i 2020-12-06 12:59

Suppose we have an alphabet \"abcdefghiklimnop\". How can I recursively generate permutations with repetition of this alphabet in groups of FIVE in an efficient way?

3条回答
  •  萌比男神i
    2020-12-06 13:10

    In order to pick five characters from a string recursively, follow a simple algorithm:

    • Your method should get a portion filled in so far, and the first position in the five-character permutation that needs a character
    • If the first position that needs a character is above five, you are done; print the combination that you have so far, and return
    • Otherwise, put each character into the current position in the permutation, and make a recursive call

    This is a lot shorter in Java:

    private static void permutation(char[] perm, int pos, String str) {
        if (pos == perm.length) {
            System.out.println(new String(perm));
        } else {
            for (int i = 0 ; i < str.length() ; i++) {
                perm[pos] = str.charAt(i);
                permutation(perm, pos+1, str);
            }
        }
    }
    

    The caller controls the desired length of permutation by changing the number of elements in perm:

    char[] perm = new char[5];
    permutation(perm, 0, "abcdefghiklimnop");
    

    Demo.

提交回复
热议问题