순열

package main.java;
import java.util.*;
public class PermutaionAndCombination {
    static int[] output;
    public static void main(String[] args) {
        PermutationSwap(new int[]{1,3,5,6}, 0, 4, 3);
        output = new int[3];
        System.out.println("======");
        Combination(new int[]{1,3,5,6},  0, 0);
    }
    public static void Combination(int[] arr, int n, int k){
        if(n == 3){
            for(int x : output){
                System.out.print(x+" ");
            }
            System.out.println();
        }else{
            for(int i = k; i<arr.length; i++){
                output[n]=arr[i];
                Combination(arr,n+1,i+1);
            }
        }
    }
    public static void PermutationSwap(int[] arr, int start, int n, int k) {
      if(start==k){
          for(int i = 0; i<k; i++){
              System.out.print(arr[i]+" ");
          }
          System.out.println();
      }else{
          for(int i = start; i<k; i++){
              swap(arr,i, start);
              PermutationSwap(arr, start+1, n, k);
              swap(arr,i, start);
          }
      }
    }
    public static void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}

Untitled

DFS방법

import java.util.*;
public class Main {
  static int len = 3;
  static int target = 2;
  static boolean[] ch = new boolean[3];
  static int[] arr = new int[]{3,6,9};
  static int[] output = new int[2];
  public static void main(String[] args) {
    Permutation(0);
  }
  public static void Permutation(int n) {  
    if(n==target){
      for(int x : output){
        System.out.print(x+" ");
      }
      System.out.println();
    }else{
      for(int i = 0; i<len; i++){
        if(!ch[i]){
          ch[i]=true;
          output[n]=arr[i];
          Permutation(n+1);
          ch[i]=false;
        }
      }
    }
  }
public static void Combination(int level, int s){
    if(level==target){
      for(int x : output){
        System.out.print(x+" ");
      }
      System.out.println();
    }else{
      for(int i = s; i<arr.length; i++){
          output[level]=arr[i];
          Combination(level+1,i+1);
      }
    }
  }
}