본문 바로가기

컴/알고리즘

순열 (java)

- 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