在Java中重复排列数组

use*_*424 9 java arrays recursion permutation

在网站上有一些类似的问题已经有所帮助,但我不能完全解决这个问题,所以我希望这不是重复的.

这是一个家庭作业,你有一组字符[A,B,C],并且必须使用递归来获得所有的排列(重复).我有的代码是这样做的:

char[] c = {'A', 'B' , 'C'};

public void printAll(char[] c, int n, int k) {
    if (k == n) {
      System.out.print(c);
      return;
    }
    else {   
      for (int j = 0; j<n; j++) {
        for (int m = 0; m<n; m++) {
           System.out.print(c[k]); 
           System.out.print(c[j]); 
           System.out.print(c[m] + "\r\n");
        }
      }
    }        
    printAll(c, n, k+1);    
}
Run Code Online (Sandbox Code Playgroud)

但是,参数n应该定义输出的长度,所以虽然这个函数打印出长度为3的所有排列,但它不能用长度为2的那些.我已经尝试了我能想到的一切,并且仔细研究了谷歌的搜索结果,而且我因为无法解决看似简单的问题而感到恶心.

Joh*_*rak 7

如果我理解正确,您将获得一组字符c和所需的长度n.

从技术上讲,没有重复排列的东西.我假设你想要所有长度的字符串n来自c.

你可以这样做:

to generate all strings of length N with letters from C
 -generate all strings of length N with letters from C
     that start with the empty string.

to generate all strings of length N with letters from C
   that start with a string S
 -if the length of S is N
  -print S
 -else for each c in C
  -generate all strings of length N with letters from C that start with S+c
Run Code Online (Sandbox Code Playgroud)

在代码中:

printAll(char[] c, int n, String start){
  if(start.length >= n){
    System.out.println(start)
  }else{
    for(char x in c){ // not a valid syntax in Java
      printAll(c, n, start+x);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 先生,您不仅仅是一位绅士和学者。你是君子、君子、学者。网上的其他一些人提出了类似的建议,除了使用数组而不是字符串。但是,您的解释要清楚得多。 (2认同)