본문 바로가기
알고리즘

Permutation 구하기

by e-pd 2020. 9. 8.

abc로 만들수 있는 문자의 조합을 구하여라

1
2
3
4
5
6
@Test
    void solve() {
        String str = "abc";
        assertThat(new StringPermutation().solve(str))
                .containsExactlyInAnyOrder("abc""acb""bac""bca""cab""cba");
    }
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
    public List<String> solve(String str) {
        if (str == null) {
            return null;
        }
 
        return recursive(str, new boolean[str.length()], ""new ArrayList<>());
    }
 
    private List<String> recursive(String str, boolean[] visited, String cur, ArrayList<String> result) {
        if (cur.length() == str.length()) {
            result.add(cur);
            return result;
        }
 
        for (int i = 0; i < str.length(); i++) {
            if (visited[i]) {
                continue;
            }
            visited[i] = true;
            recursive(str, visited, cur + str.charAt(i), result);
            visited[i] = false;
        }
        return result;
    }
cs

'알고리즘' 카테고리의 다른 글

문자열 내 p와 y의 개수  (0) 2020.09.09
두 정수 사이의 합  (0) 2020.09.09
Reverse Linked List  (0) 2020.08.26
Char length count  (0) 2020.08.25
Valid Anagram  (0) 2020.08.25