더북(TheBook)

위 해법은 결과를 화면에 출력한다. 결과를 저장하고 싶으면 구현에 Set을 추가해야 한다. 중복을 제거해주므로 Set을 쓰는 편이 좋다.

public static Set<String> permuteAndStore(String str) {
  return permuteAndStore("", str);
}

private static Set<String>
  permuteAndStore(String prefix, String str) {
    Set<String> permutations = new HashSet<>();
    int n = str.length();

    if (n == 0) {
      permutations.add(prefix);
    } else {
      for (int i = 0; i < n; i++) {
        permutations.addAll(permuteAndStore(prefix + str.charAt(i),
          str.substring(i + 1, n) + str.substring(0, i)));
      } 
    }

    return permutations;
  }

가령 TEST라는 문자열을 전달하면 Set은 다음과 같은 출력을 생성한다(모두 고유한 순열이다).

ETST SETT TEST TTSE STTE STET TETS TSTE TSET TTES ESTT ETTS