- ex) 0 ~ 9로 구성된 정수 list를 가지고, 만들 수 있는 모든 숫자 구하기
(list에 중복된 숫자가 있으므로 결과에도 중복이 발생할 수 있다)
public class Main {
public static void main(String[] arg) {
List<Integer> number = Arrays.asList(1, 2, 3, 3, 2, 1);
for (int i = 1; i <= number.size(); i++) {
permutation(number, 0, i);
}
}
// r : 숫자의 길이
private void permutation(List<Integer> arr, int depth, int r) {
if (depth == r) {
System.out.println(arrToNum(arr, r));
return;
}
for (int i = depth; i < arr.size(); i++) {
swap(arr, depth, i);
permutation(arr, depth + 1, r);
swap(arr, depth, i);
}
}
private void swap(List<Integer> arr, int i, int j) {
int temp = arr.get(j);
arr.set(j, arr.get(i));
arr.set(i, temp);
}
private int arrToNum(List<Integer> arr, int r) {
int ret = 0;
for (int i = 0; i < r; i++) {
ret = ret * 10 + arr.get(i);
}
return ret;
}
}
'컴 > 알고리즘' 카테고리의 다른 글
트라이(Trie) (0) | 2020.04.26 |
---|---|
Heap (0) | 2020.04.24 |
C++ - next_permutation (0) | 2020.04.16 |
분할 정복 (병합정렬, 퀵정렬) (0) | 2020.04.15 |
시간 복잡도 분석과 알고리즘 정당성 증명 (0) | 2020.04.14 |