/*
Problem 22 Generate Parentheses:
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.For example, given n = 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()"
*/
public List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<String>();
backtrack(list, "", 0, 0, n);
return list;
}
private void backtrack(List<String> list, String str, int open, int close, int max){
if(str.length() == max*2){
list.add(str);
return;
}
if(open < max)
backtrack(list, str + "(", open + 1, close, max);
if(close < open)
backtrack(list, str+")", open, close+1, max);
}
這是LeetCode上的一個流行解決方案,我知道DFS理論,我只是無法得到兩點。關於遞歸DFS的2個問題
在遞歸函數,有兩個選項添加後「(」,要麼添加一個「(」或添加一些「)」,但代碼是由升轉跌,怎麼可以把這些代碼過程中的其他解決方案執行除了((()))。 Like(()()),它是如何在兩個後面添加')'的('
完成一個解決方案後,將它添加到列表並返回,它是如何在返回後獲取其他解決方案嗎?是不是說這個方法會在返回後結束? 關於Java的新學習器,感謝您的詳細解答