• LeetCode 22 Generate Parentheses(找到所有匹配的括号组合)


     
    给一个整数n,找到所有合法的 () pairs 
     

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

    [
      "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"
    ]
    
    
    递归程序:首先合法的pairs一定是左括号个数等于右括号个数。因此对于n对pairs,左括号个数为n个。
    递归程序,按照括号个数进行判断。当左括号个数小于n时,str+”(“,当右括号个数小于左括号个数时,str+”)”
     
    分析递归程序需要传递的参数:
    首先要将保存结果的List<String> list传递进去,然后是每次修改之后的str,之后需要知道左括号个数 open ,还有右括号个数 close , 最后是最大括号个数为 max
     
    private void backtrack(List<String> list,String str, int open, int close, int max)
     
    当str长度等于2*max时,说明结束,此时需要执行 list.add(str)
    当open < max 时 添加一个( 执行     backtrack ( list, str + ”(“, open+1, close, max);
    当close < open 时 添加一个 ) 执行 backtrack ( list, str+ “)”, open, close +1 ,max);
     
    因此执行顺序为: 先得到右括号个数连续个数为max时(从下标为0开始)的情况,在得到右括号连续个数为max-1 时的情况 (此时会进行执行添加右括号的命令) 
     
    参考代码:
     
    package leetcode_50;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /***
     * 
     * @author pengfei_zheng
     * n对合理括号结果求解问题
     */
    public class Solution22 {
        public static List<String> generateParenthesis(int n) {
            List<String> list = new ArrayList<>();
            backtrack(list,"",0,0,n);
            
            return list;
        }
        private static void backtrack(List<String> list,String str, int open, int close, int max) {
            if(str.length()==2*max){
                list.add(str);
                return;
            }
            if(open<max)
                backtrack(list,str+"(",open+1,close,max);
            if(close<open)
                backtrack(list,str+")",open,close+1,max);
        }
        public static void main(String[]args){
            List<String> list = generateParenthesis(3);
            System.out.println(list);
        }
    }
     
     
     
  • 相关阅读:
    springmvc 方法参数自定义的解析
    numpy生成随机数组,超几何分布与连续分布
    机器学习笔试知识点
    梯度下降(Gradient Descent)小结
    numpy傅里叶变换
    numpy奇异值分解,广义逆矩阵与行列式
    numpy求解特征值和特征向量
    Scrapy简单介绍
    python异步库twisted
    同步,异步,阻塞和非阻塞的通俗理解
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6518941.html
Copyright © 2020-2023  润新知