zoukankan      html  css  js  c++  java
  • Generate Parentheses

    Generate Parentheses

    问题:

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

    For example, given n = 3, a solution set is:

    "((()))", "(()())", "(())()", "()(())", "()()()"

    思路:

      dfs

    我的代码:

    public class Solution {
        public List<String> generateParenthesis(int n) {
            List<String> rst = new ArrayList<String>();
            if( n < 1)  return rst;
            helper(rst, n, n, "");
            return rst;
        }
        public void helper(List<String> list, int left , int right, String s)
        {
            if(left == 0 && right == 0)
            {
                list.add(s);
                return;
            }
            if(left > 0)
                helper(list, left - 1,right, s+"(");
            if(left < right)
                 helper(list, left, right - 1, s+")");
        }
    }
    View Code

    学习之处:

    • 此问题最终转化成了二叉树的问题,二叉树的遍历用DFS,二叉树如下图所示。
    • 递归方程的写法,画图即可明了,left > 0 继续加“(” left < right的时候 加上“)”。
    • 确定递归方程看前两行就可以了,实际程序如何压栈,弹栈,仔细考虑一下,便很清楚明了了。

  • 相关阅读:
    剑指 Offer 25. 合并两个排序的链表
    53. 最大子序和 动态规划
    121. 买卖股票的最佳时机
    20. 有效的括号
    centos7 常用操作
    树莓派
    golang 学习笔记
    并发 线程 进程
    连接内网问题
    Lamp 高并发优化
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4322701.html
Copyright © 2011-2022 走看看