위 해법은 결과를 화면에 출력한다. 결과를 저장하고 싶으면 구현에 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