zoukankan      html  css  js  c++  java
  • [LeetCode] 22. 括号生成

    参考DFS和BFS

    方法一:DFS

    class Solution {
        public List<String> generateParenthesis(int n) {
            List<String> res = new ArrayList<>();
            // 特判
            if (n == 0) {
                return res;
            }
    
            dfs("", 0, 0, n, res);
            return res;
        }
    
        public void dfs(String curStr,int left,int right,int n,List<String> res){
            if(left==n&&right==n){
                res.add(curStr);
                return;
            }
            if(left<right){
                return;
            }
            if(left<n){
                dfs(curStr+"(",left+1,right,n,res);
            }
            if(right<n){
                dfs(curStr+")",left,right+1,n,res);
            }
        }
    }

    方法二:BFS

    方法三:动态规划:

    无后效性可以改为动态规划

    class Solution {
        public List<String> generateParenthesis(int n) {
            if(n==0){
                return new ArrayList<>();
            }
    
            List<List<String>> dp=new ArrayList<>(n);
            List<String> dp0=new ArrayList<>();
            dp0.add("");
            dp.add(dp0);
    
            for(int i=1;i<=n;i++){
                List<String> cur=new ArrayList<>();
                for(int j=0;j<i;j++){
                    List<String> str1=dp.get(j);
                    List<String> str2=dp.get(i-1-j);
                    for(String s1:str1){
                        for(String s2:str2){
                            cur.add("("+s1+")"+s2);
                        }
                    }
                }
                dp.add(cur);
            }
            return dp.get(n);
        }
    }

  • 相关阅读:
    数据库连接池、事务
    JDBC、单元测试、DAO模式
    归并排序
    插入排序
    MySQL数据库
    JQuery
    JavaScript
    算法训练 连续正整数的和
    算法提高 寻找三位数
    算法训练 学做菜
  • 原文地址:https://www.cnblogs.com/doyi111/p/12666979.html
Copyright © 2011-2022 走看看