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

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

  • 相关阅读:
    Kinect 开发 —— 硬件设备解剖
    Kinect 开发 —— 引言
    (转)OpenCV 基本知识框架
    OpenCV —— 摄像机模型与标定
    OpenCV —— 跟踪与运动
    OpenCV —— 图像局部与分割(二)
    OpenCV —— 图像局部与部分分割(一)
    OpenCV —— 轮廓
    OpenCV —— 直方图与匹配
    OpenCV —— 图像变换
  • 原文地址:https://www.cnblogs.com/yunyouhua/p/7099305.html
Copyright © 2011-2022 走看看