方法:递归+回溯
n对括号的生成就是n个左括号和n个右括号组成的合法排列,在使用了一个左括号后,还剩n-1个左括号和n个右括号进入子问题递归。但是要保证序列合法,使用的右括号数不能大于左括号,因此需要每次都检查使用的括号数量。
具体做法:
- step 1:将空串与左右括号各自使用了0个送入递归。
- step 2:若是左右括号都使用了n个,此时就是一种结果,添加后返回。
- step 3:若是左括号数没有到达n个,可以考虑增加左括号进入递归,或者右括号数没有到达n个且左括号的使用次数多于右括号就可以增加右括号进入递归。
import java.util.*;
public class Solution {
public void dfs(ArrayList<String> res,String temp,int n,int left,int right){
if(left==n&&right==n){
res.add(new String(temp));
return;
}
if(left<n){
dfs(res,temp+"(",n,left+1,right);
}
if(right<n&&left>right){
dfs(res,temp+")",n,left,right+1);
}
}
public ArrayList<String> generateParenthesis (int n) {
ArrayList<String> res = new ArrayList<String>();
dfs(res,"",n,0,0);
return res;
}
}


京公网安备 11010502036488号