题解 | #括号生成#
括号生成
http://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca
//思路:有效的括号组合,“(”总是在“)”之前出现,如果“)”在“(”之前出现了,那么是无效的组合,所以本题是找出所有有效的解,采用DFS和回溯算法。
- //创建一个List用于放最后的结果
- ArrayList<string> res = new ArrayList<string>();</string></string>
- public ArrayList<string> generateParenthesis (int n) {</string>
- //排除没有括号情况
- if(n < 1) {
- return res;
- }
- //有括号,DFS和回溯算法
- String str ="";
- dfs(str,res,n,n);
- return res;
- }
- public void dfs(String str,List<string> res,int left,int right){</string>
- //左右括号都分配完了,则将组合str添加到结果res
- if(left==0 && right ==0){
- res.add(str);
- }
- -
- //只有当“(”比“)”数量多时,才可以添加“)”
- if(left>0){
- str = str + "(";
- dfs(str,res,left-1,right);
- //删除最后一项,也就是进行回溯
- str =str.substring(0,str.length()-1);
- }
- if(right > left){
- str = str + ")";
- dfs(str,res,left,right-1);
- //同理,进行回溯
- str = str.substring(0,str.length()-1);
- }
- }
- }