簡體   English   中英

Java中括號算法的說明

[英]Parentheses algorithm clarification in Java

我有下面的方法生成所有有效的打開和關閉的括號組合:

public static void getParentheses(int openParenthesis, int closeParenthesis, String string) {
    if (openParenthesis == 0 && closeParenthesis == 0) {
        System.out.println(string);
    }

    if (openParenthesis > closeParenthesis) {
        return;
    }

    if (openParenthesis > 0) {
        System.out.println("openParenthesis: " + openParenthesis + " / closeParenthesis: " + closeParenthesis);
        getParentheses(openParenthesis - 1, closeParenthesis, string + "(");
    }

    if (closeParenthesis > 0) {
        System.out.println("openParenthesis: " + openParenthesis + " / closeParenthesis: " + closeParenthesis);
        getParentheses(openParenthesis, closeParenthesis - 1, string + ")");
    }
}

我使用此行調用此方法:

getParentheses(3, 3, "");

輸出為:

openParenthesis: 3 / closeParenthesis: 3
openParenthesis: 2 / closeParenthesis: 3
openParenthesis: 1 / closeParenthesis: 3
openParenthesis: 0 / closeParenthesis: 3
openParenthesis: 0 / closeParenthesis: 2
openParenthesis: 0 / closeParenthesis: 1
((()))
openParenthesis: 1 / closeParenthesis: 3 //Line8
openParenthesis: 1 / closeParenthesis: 2
openParenthesis: 0 / closeParenthesis: 2
openParenthesis: 0 / closeParenthesis: 1
(()())

我不明白為什么在Line8openParenthesis的值為1 ,因為該方法的最后一次調用是使用00 是什么使它增加到1

第3行和第8行來自同一函數調用:第3行是由

if (openParenthesis > 0) {
    System.out.println("openParenthesis: " + openParenthesis + " / closeParenthesis: " + closeParenthesis);
    getParentheses(openParenthesis - 1, closeParenthesis, string + "(");
}

第8行:

if (closeParenthesis > 0) {
    System.out.println("openParenthesis: " + openParenthesis + " / closeParenthesis: " + closeParenthesis);
    getParentheses(openParenthesis, closeParenthesis - 1, string + ")");
}

從遞歸調用返回后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM