전체코드 : GIthub
순열 : arr배열에서 i개 선택하여 줄세우기
private static void perm(int[] arr, int i, int[] rs, boolean[] visited) {
// TODO Auto-generated method stub
if(i==rs.length) {
System.out.println(Arrays.toString(rs));
return;
}
for (int j = 0; j < arr.length; j++) {
if(visited[j])
continue;
rs[i]=arr[j];
visited[j]=true;
perm(arr,i+1,rs,visited);
visited[j]=false;
}
중복순열 : arr배열에서 중복가능하게 i개 선택하여 줄세우기
private static void re_perm(int[] arr, int i, int[] rs) {
// TODO Auto-generated method stub
if(i==rs.length) {
System.out.println(Arrays.toString(rs));
return;
}
for (int j = 0; j < arr.length; j++) {
rs[i]=arr[j];
re_perm(arr,i+1,rs);
}
}
조합 : arr배열에서 j개 선택
private static void com(int[] arr, int i, int j, int[] rs) {
// TODO Auto-generated method stub
if(j==rs.length) {
System.out.println(Arrays.toString(rs));
return;
}
if(i==arr.length)
return;
rs[j]=arr[i];
com(arr,i+1,j+1,rs);
com(arr,i+1,j,rs);
}
중복조합 : arr배열에서 중복가능하게 j개 선택
private static void re_com(int[] arr, int i, int j, int[] rs) {
// TODO Auto-generated method stub
if(j==rs.length) {
System.out.println(Arrays.toString(rs));
return;
}
if(i==arr.length)
return;
rs[j]=arr[i];
re_com(arr,i,j+1,rs);
re_com(arr,i+1,j,rs);
}
부분집합 : 모든 부분집합 선택하기
private static void power(int[] arr, int i, boolean[] bs) {
// TODO Auto-generated method stub
if(i==arr.length) {
for (int j = 0; j < arr.length; j++) {
if(bs[j])
System.out.print(arr[j]);
}
System.out.println();
return;
}
bs[i]=false;
power(arr,i+1,bs);
bs[i]=true;
power(arr,i+1,bs);
}