問題
數字 n 代表生成括號的對數,請你設計一個函數,用於能夠生成所有可能的並且 有效的 括號組合。
示例:
輸入:n = 3
輸出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/generate-parentheses
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
解決思路
其實每一次都相當於是在新的一位置上進行添加括號,而當前可添加的括號主要取決於之前已經放置的左括號。如果沒
有足夠的左括號與右括號匹配,則無法添加右括號,或,右括號已經用光了,但這種情況不可能出現。
代碼
class Solution {
static List<String> list=new ArrayList<String>();
public List<String> generateParenthesis(int n) {
list.clear();
recursion(n,n,0,"");
return list;
}
public static void recursion(int left,int right,int canGo,String str){
if(left==0&&right==0){
list.add(str);return;
}
if(left<0||right<0)return ;
if(left>0){
recursion(left-1,right,canGo+1,str+"(");
}
if(right >0&&canGo>0){
recursion(left,right-1,canGo-1,str+")");
}
}
}