[LeetCode] 22. 括号生成
参考DFS和BFS
方法一:DFS
class Solution { public List<String> generateParenthesis(int n) { List<String> res = new ArrayList<>(); // 特判 if (n == 0) { return res; } dfs("", 0, 0, n, res); return res; } public void dfs(String curStr,int left,int right,int n,List<String> res){ if(left==n&&right==n){ res.add(curStr); return; } if(left<right){ return; } if(left<n){ dfs(curStr+"(",left+1,right,n,res); } if(right<n){ dfs(curStr+")",left,right+1,n,res); } } }
方法二:BFS
方法三:动态规划:
无后效性可以改为动态规划
class Solution { public List<String> generateParenthesis(int n) { if(n==0){ return new ArrayList<>(); } List<List<String>> dp=new ArrayList<>(n); List<String> dp0=new ArrayList<>(); dp0.add(""); dp.add(dp0); for(int i=1;i<=n;i++){ List<String> cur=new ArrayList<>(); for(int j=0;j<i;j++){ List<String> str1=dp.get(j); List<String> str2=dp.get(i-1-j); for(String s1:str1){ for(String s2:str2){ cur.add("("+s1+")"+s2); } } } dp.add(cur); } return dp.get(n); } }