题解 | #括号生成#

括号生成

http://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca

//思路:有效的括号组合,“(”总是在“)”之前出现,如果“)”在“(”之前出现了,那么是无效的组合,所以本题是找出所有有效的解,采用DFS和回溯算法。

  1. //创建一个List用于放最后的结果
  2. ArrayList<string> res = new ArrayList<string>();</string></string>
  3. public ArrayList<string> generateParenthesis (int n) {</string>
  4. //排除没有括号情况
  5. if(n < 1) {
  6. return res;
  7. }
  8. //有括号,DFS和回溯算法
  9. String str ="";
  10. dfs(str,res,n,n);
  11. return res;
  12. }
  13. public void dfs(String str,List<string> res,int left,int right){</string>
  14. //左右括号都分配完了,则将组合str添加到结果res
  15. if(left==0 && right ==0){
  16. res.add(str);
  17. }
  18. -
  19. //只有当“(”比“)”数量多时,才可以添加“)”
  20. if(left>0){
  21. str = str + "(";
  22. dfs(str,res,left-1,right);
  23. //删除最后一项,也就是进行回溯
  24. str =str.substring(0,str.length()-1);
  25. }
  26. if(right > left){
  27. str = str + ")";
  28. dfs(str,res,left,right-1);
  29. //同理,进行回溯
  30. str = str.substring(0,str.length()-1);
  31. }
  32. }
  33. }
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务