Appearance
순열 & 조합
Java 코드
java
import java.util.ArrayList;
import java.util.Arrays;
public class 순열조합 {
static char[] arr = { 'a', 'b', 'c', 'd' };
static int r = 2;
//arr배열에서 r개를 선택한다.
//선택된 요소들은 set배열에 저장.
public static void main(String[] args) {
set = new char[r];
System.out.println("==조합==");
comb(0,0);
System.out.println("==중복조합==");
rcomb(0, 0);
visit = new boolean[arr.length];
System.out.println("==순열==");
perm(0);
System.out.println("==중복순열==");
rperm(0);
System.out.println("==부분집합==");
setList = new ArrayList<>();
subset(0,0);
}
static char[] set;
public static void comb(int len, int k) { // 조합
if (len == r) {
System.out.println(Arrays.toString(set));
return;
}
if (k == arr.length)
return;
set[len] = arr[k];
comb(len + 1, k + 1);
comb(len, k + 1);
}
public static void rcomb(int len, int k) { // 중복조합
if (len == r) {
System.out.println(Arrays.toString(set));
return;
}
if (k == arr.length)
return;
set[len] = arr[k];
rcomb(len + 1, k);
rcomb(len, k + 1);
}
static boolean[] visit;
public static void perm(int len) {// 순열
if (len == r) {
System.out.println(Arrays.toString(set));
return;
}
for (int i = 0; i < arr.length; i++) {
if (!visit[i]) {
set[len] = arr[i];
visit[i] = true;
perm(len + 1);
visit[i] = false;
}
}
}
public static void rperm(int len) {// 중복순열
if (len == r) {
System.out.println(Arrays.toString(set));
return;
}
for (int i = 0; i < arr.length; i++) {
set[len] = arr[i];
rperm(len + 1);
}
}
static ArrayList<Character> setList;
public static void subset(int len, int k) {// 부분집합
System.out.println(setList);
if (len == arr.length) {
return;
}
for (int i = k; i < arr.length; i++) {
setList.add(arr[i]);
subset(len + 1, i + 1);
setList.remove(setList.size() - 1);
}
}
}