我正在尝试获取一些置换,以后将用它们来蛮力邻接矩阵。下面的代码可能无效,但是可以工作。我想将所有输出的排列添加到数组中。我正在努力做到这一点。有人可以帮忙吗?

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
  }
}

09-30 09:48