zoukankan      html  css  js  c++  java
  • DFS

    public class Solution {
        public List<String> generateParenthesis(int n) {
            List<String> results = new ArrayList<>();
            if (n == 0) {
                return results;
            }
            generate(0, 2 * n, "", results);
            return results;
        }
        private void generate(int level, int n, String curState, List<String> results) {
            //recursion terminstor 先写
            if (level >= n) {
                //方法一:此处判断是否合法
                if (isValid(curState)) {
                    results.add(curState);
                }
                
                return;
            }
            generate(level + 1, n, curState + "(", results);
           
            generate(level + 1, n, curState + ")", results);
        }
        private boolean isValid(String s) {
            char[] c = s.toCharArray();
            Stack stack = new Stack();
            for (int i = 0; i < c.length; i++) {
                if(c[i] == ')' && !stack.isEmpty()) {
                    stack.pop();
                } else if (c[i] == '(') {
                    stack.push(c[i]);
                } else {
                    return false;
                }
            }
            if (stack.isEmpty()) {
                return true;
            }
            return false;
        }
    }
    View Code

    O(T)有问题

    应该每步进行判断。

    public class Solution {
        public List<String> generateParenthesis(int n) {
            List<String> results = new ArrayList<>();
            if (n == 0) {
                return results;
            }
            gen(n, n, "", results);
            return results;
        }
        private void gen(int left, int right, String cur, List<String> results) {
            if (left == 0 && right == 0) {
                results.add(cur);
            }
            if (left > right) {
                return;
            }
            if (left > 0) {
                gen(left - 1, right, cur + '(', results);
            }
            if (right > 0 ) {
                gen(left, right - 1, cur + ')', results);
            }
        }
    }
    View Code

    思路:先有左括号,再有右括号。

  • 相关阅读:
    CG_Lession
    linux学习网站大全[转]
    C++ books
    Linux 建议学习路径[转]
    talking C++ STL
    Factory
    计算机图像图形学相关好书推荐
    ASP.NET控件缩写大全
    web开发面试题一
    ASP.Net面试题之二
  • 原文地址:https://www.cnblogs.com/yunyouhua/p/7099305.html
Copyright © 2011-2022 走看看