java - 暴力破解的排列

标签 java permutation 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
  }
}

关于java - 暴力破解的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067730/

相关文章:

java - 寻找内存高效设计

java - SQL 语句转换为 hibernate 标准(具有 count 子句)

java - 给定 n 和 k,返回第 k 个排列序列

python - 在Python中计算多个斜率

python - 创建一个Bruteforce程序,该程序可对随机非重复数字进行混洗。收到ValueError-不确定为什么吗?

java - 服务器发送事件 HTML5 错误(此 url 中的资源不是文本)

java - JMS:消息选择器中的模运算符

c# - 不重复的复杂排列

Python - 生成 string.ascii_lowercase 的紊乱

开关程序的算法检查