字符串java中单词的所有排列
我找到了代码,但不理解递归部分字符串java中单词的所有排列,java,string,Java,String,我找到了代码,但不理解递归部分 public static void main (String args[]) { System.out.println("Please enter the string whose permutations we need to show "); Scanner in = new Scanner(System.in); String original=in.nextLine(); System.ou
public static void main (String args[]) {
System.out.println("Please enter the string whose permutations we need to show ");
Scanner in = new Scanner(System.in);
String original=in.nextLine();
System.out.println("Results are :");
permute(original);
}
public static void permute( String input) {
int inputLength = input.length();
boolean[ ] used = new boolean[ inputLength ];
StringBuffer outputString = new StringBuffer();
char[ ] in = input.toCharArray( );
doPermute ( in, outputString, used, inputLength, 0 );
}
public static void doPermute ( char[ ] in, StringBuffer outputString,
boolean[ ] used, int inputLength, int level) {
if( level == inputLength) {
System.out.println ( outputString.toString());
return;
}
for( int i = 0; i < inputLength; i++ ) {
if( used[i] ) continue;
outputString.append( in[i] );
used[i] = true;
doPermute( in, outputString, used, inputLength, level + 1 );
used[i] = false;
outputString.setLength( outputString.length() - 1 );
}
}
}
输出:
ABC ACB BAC BCA CAB CBA
使用的布尔数组根据中的存储,即[0]=A使用的[0]=false,表示未使用“A”
现在,如果(level==inputLength),它将不会进入,因为level为0,inputLength为3
在for loop
中,输出
附加了“A”,并将使用的[0]设置为真
它调用doPermute({A,B,C},“A”,{true,false,false},3,1)
现在,如果长度仍然为1,它将跳过
为循环输入
跳过“A”,因为在下一次添加中使用的[0]
是真的“B”
将使用的[1]
设置为真的,并调用将添加“C”的函数并停止 那么,你的问题是什么?doPermute
是一个递归函数。我不明白doPermute()方法在打印ABC并使用[2]=false,i=2,ouputString=“AB”和for循环增量后如何工作,它应该在i=3时退出循环。我不明白ABC rest置换后如何使用递归函数OK,您已经解释了参数。你能解释一下算法本身吗?我改变了答案。希望它能解决这个问题
ABC ACB BAC BCA CAB CBA
public static void doPermute(char[] in, StringBuffer outputString,
boolean[] used, int inputLength, int level) {
if (level == inputLength) {
System.out.println(outputString.toString());
return;
}
for (int i = 0; i < inputLength; i++) {
if (used[i])
continue;
outputString.append(in[i]);
used[i] = true;
doPermute(in, outputString, used, inputLength, level + 1);
used[i] = false;
outputString.setLength(outputString.length() - 1);
}
}
({A,B,C}, "", {false,false,false}, 3, 0)