Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串java中单词的所有排列_Java_String - Fatal编程技术网

字符串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)