1、題目
22. 括號(hào)生成 - 力扣(LeetCode) https://leetcode-cn.com/problems/generate-parentheses/
2佛玄、題解
本題主要是解決兩個(gè)問題硼一,第一步是得到n對(duì)括號(hào)的排列組合方式,這個(gè)必須將左右括號(hào)分開排列組合梦抢。不然就只有一種般贼。這樣的話只需要通過遞歸的方式將n個(gè)左右括號(hào)排列組合的可能全部形成String值,裝到List中即可奥吩。第二步哼蛆,是得到有效的括號(hào),即先有一個(gè)左括號(hào)霞赫,才能有一個(gè)右括號(hào)腮介。所以將遞歸方法中的判斷條件從:
if(left>0){
getParenthesisResult(result,str+'(',left-1,right);
}
if(right>0){
getParenthesisResult(result,str+')',left,right-1);
}
改為:
if(left>0){
getParenthesisResult(result,str+'(',left-1,right);
}
if(right>left){
getParenthesisResult(result,str+')',left,right-1);
}
即可。
3端衰、代碼
//得到有效的括號(hào)的組合結(jié)果叠洗;
class Solution {
public List<String> generateParenthesis(int n) {
ArrayList<String> result = new ArrayList<>();
String str = new String();
getParenthesisResult(result,str,n,n);
return result;
}
private void getParenthesisResult(ArrayList<String> result, String str, int left, int right) {
if(left==0&&right==0){
result.add(str);
return;
}
if(left>0){
getParenthesisResult(result,str+'(',left-1,right);
}
if(right>left){
getParenthesisResult(result,str+')',left,right-1);
}
}
}
4、執(zhí)行結(jié)果
image.png