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

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

  • 相关阅读:
    java 下载图片并传输(java自带 BASE64工具进行图片和字符串转换)
    MySQL的日期格式
    eclipse下查看maven下载的源码中文乱码问题
    Linux----部署
    python----logging
    python----pymysql
    vmware15 激活秘钥
    vmware15 激活秘钥
    Ubuntu18.04安装
    msyql45讲 20--幻读是什么,幻读有什么问题?
  • 原文地址:https://www.cnblogs.com/yunyouhua/p/7099305.html
Copyright © 2011-2022 走看看