蛮力的排列

Permutations for Brute Force

我正在尝试获得一些排列,稍后我将使用这些排列来暴力破解邻接矩阵。下面的代码可能效率不高,但它可以工作。我想将所有输出的排列添加到一个数组中。我正在努力做到这一点。谁能帮忙?

import java.util.*;

class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    System.out.println("Enter num: ");
    int num = in.nextInt();

    String str = "";
    for (int i=0; i < num; i++){
      String temp = Integer.toString(i); 
      str += temp;
    }

    int n = str.length(); 
    Permutation permutation = new Permutation(); 
    permutation.permute(str, 0, n-1);

  }
}


class Permutation { 
  public void permute(String str, int l, int r){ 
    if (l == r) {
      System.out.println(str);
    }
    else{ 
      for (int i = l; i <= r; i++){ 
        str = swap(str,l,i); 
        permute(str, l+1, r); 
        str = swap(str,l,i); 
      } 
    }

  } 

  public String swap(String a, int i, int j) { 
    char temp; 
        char[] charArray = a.toCharArray(); 
        temp = charArray[i] ; 
        charArray[i] = charArray[j]; 
        charArray[j] = temp; 
        String perm = String.valueOf(charArray);
    return perm;
  } 
}

只是不打印,而是将它们存储在列表中。这里我使用了 LinkedList.

class Permutation { 

    static LinkedList<String> output= new LinkedList<>(); //<---for storing result 

  public void permute(String str, int l, int r){ 
    if (l == r) {
    //   System.out.println(str);

        output.addLast(str); //<----store it in the linkedlist
    }
    else{ 
      for (int i = l; i <= r; i++){ 
        str = swap(str,l,i); 
        permute(str, l+1, r); 
        str = swap(str,l,i); 
      } 
    }

  } 

之后,您可以打印 Main 的结果。

class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    .....

    code
    ....

    permutation.permute(str, 0, n-1);
    System.out.println(Permutation.output); //<----print the result
  }
}

你可以试试这个。

import java.util.*;

class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    System.out.println("Enter num: ");
    int num = in.nextInt();

    String str = "";
    for (int i=0; i < num; i++){
      String temp = Integer.toString(i); 
      str += temp;
    }

    int n = str.length(); 
    Permutation permutation = new Permutation(); 
    List<String> permutations = permutation.allPermutations(str, 0, n-1);
  }
}


class Permutation {
  List<String> permutations;

  public List<String> allPermutations(String str, int l, int r){ 
    permutations = new ArrayList<String();
    permute(str, l, r);

    return permutations;
  }

  public void permute(String str, int l, int r){ 
    if (l == r) {
      // System.out.println(str);
      permutations.add(str);
    }
    else{ 
      for (int i = l; i <= r; i++){ 
        str = swap(str,l,i); 
        permute(str, l+1, r); 
        str = swap(str,l,i); 
      } 
    }

  } 

  public String swap(String a, int i, int j) { 
    char temp; 
        char[] charArray = a.toCharArray(); 
        temp = charArray[i] ; 
        charArray[i] = charArray[j]; 
        charArray[j] = temp; 
        String perm = String.valueOf(charArray);
    return perm;
  } 
}