언어/JAVA
Permutation, Combination algorithm using bitmasking
유호건
2023. 4. 6. 18:27
반응형
.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
perm(0, 0, new int[]{1, 3, 5, 7}, new int[3]);
System.out.println("---");
comb(0, 0, new int[]{1, 3, 5, 7}, new int[3]);
}
static void perm(int cnt, int mask, int[] arr, int[] perm) {
if (cnt == perm.length) {
System.out.println(Arrays.toString(perm));
return;
}
for (int i = 0; i < arr.length; i++) {
if ((mask & (1 << i)) != 0) continue;
perm[cnt] = arr[i];
perm(cnt + 1, mask | (1 << i), arr, perm);
}
}
static void comb(int cnt, int mask, int[] arr, int[] comb) {
for (int i = 1; i < (1 << arr.length); i++) {
int idx = 0;
for (int j = 0; j < arr.length; j++) {
if (idx == comb.length) {
idx = 0;
break;
}
if ((i & (1 << j)) != 0) comb[idx++] = arr[j];
}
if (idx == comb.length) {
System.out.println(Arrays.toString(comb));
}
}
}
}
반응형