
static int permutationCount = 0;
public void permutation(int[] arr, int n, int r, int depth){
if(depth == r) {
System.out.println(Arrays.toString(Arrays.copyOfRange(arr, 0, 3)));
permutationCount++;
}
for(int i = depth; i < n; i++){
swap(arr, i, depth);
permutation(arr, n, r, depth + 1);
swap(arr, i, depth);
}
}
public void swap(int[] arr, int i, int depth) {
int tmp = arr[i];
arr[i] = arr[depth];
arr[depth] = tmp;
}
재귀를 이용한다.
중첩 for문 사용한다.
- 선택하는 수가 3개 이상일 때는 재귀로 해결한다.
int n = 5;
int k = 3;
int[] a = {1,2,3,4,5};
public void printList(ArrayList<Integer> arr)
{
for(int i = 0; i < arr.size(); i++){
System.out.print(a[arr.get(i)]);
}
System.out.println();
}
public void combi(int start, ArrayList<Integer> arr){
if(arr.size() == k) {
printList(arr);
return;
}
for(int i = start + 1; i < n; i++){
arr.add(i);
combi(i, arr);
arr.remove(arr.size() - 1);
}
}
public void solution() {
ArrayList<Integer> arr = new ArrayList<>();
combi(-1 , arr);
}