zoukankan      html  css  js  c++  java
  • LeetCode 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:

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

    思路分析:这题非常easy想到用DFS。转化成search问题求解,状态就是当前形成的括号字符串。目标是搜索出全部合法括号字符串。搜索树每一次分出两支,即后面加一个左括号或者右括号。可是实现的时候,须要注意维护两个counter,leftRemain和rightRemain用于维护眼下剩余的带插入的左括号和右括号的个数。当leftRemain > rightRemain时,意味着剩余很多其它的左括号,这后面子树中是不可能有合法解的,由于右括号能够找左边已经加入的左括号匹配。而左括号仅仅能和后面新加入的右括号匹配,这样的情况须要减枝直接返回。leftRemain <=rightRemain时,继续DFS。当leftRemain 和rightRemain都为0时,全部2*n个括号插入完成。加入一个合法解。(注意这里不须要用栈做括号匹配推断是否合法。假设左括号等于右括号数目而且以左括号开头。那么必定合法,全部右括号都能够找到相应的左括号)

    AC Code

    public class Solution {
        
        public static List<String> res;
        
        public List<String> generateParenthesis(int n) {
            res = new ArrayList<String>();
            if(n <= 0) return res;
            dfs("", n, n);
            return res;
        }
        
        void  dfs(String state, int leftRemain, int rightRemain){
            if(leftRemain > rightRemain){
                return;
            }
            if(leftRemain == 0 && rightRemain == 0){
                res.add(state);
                return;
            } 
            if(leftRemain > 0){
                dfs(state + "(", leftRemain-1, rightRemain);
            } 
            if(rightRemain > 0){
                dfs(state + ")", leftRemain, rightRemain-1);
             }
        }
    }




  • 相关阅读:
    html----响应式布局,左侧栏目固定,右侧内容随着屏幕宽度变化而变化
    es6----set map应用场景
    html----实现元素上下左右居中
    html----怎样实现元素的垂直居中
    html----BFC独立渲染区
    js-----new一个对象的过程
    解决ios手机上传竖拍照片旋转90度的问题
    软键盘遮挡问题
    在不同浏览器中,input里面的输入光标大小表现形式却大不相同
    样式兼容开头
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5203488.html
Copyright © 2011-2022 走看看