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

    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

    示例 1:

    输入:n = 3
    输出:["((()))","(()())","(())()","()(())","()()()"]
    示例 2:

    输入:n = 1
    输出:["()"]

    解法一:递归    教会我程序是一步步完善的,有时候不要想着一蹴而就

    List<String> res = new ArrayList<>();
    
        public List<String> generateParenthesis(int n) {
            generate(0, 0, n, "");
            return res;
    
        }
    
        void generate(int left, int right, int n, String str) {
            // TODO 自动生成的方法存根
            if (left == n && right == n) {
                res.add(str);
                return;
            }
    
            if (left < n)
                generate(left + 1, right, n, str + "(");
            if (right < left && right < n)
                generate(left, right + 1, n, str + ")");
        }

    解法二:暴力求解也行,就是加了个对数据的检验    实时检查指的是在数据还没有完全生成的时候,每次添加做一个检查;还是做一个功能包,就是等数据都生成好了,做一个检查

    public List<String> generateParenthesis(int n) {
            List<String> combinations = new ArrayList<String>();
            generateAll(new char[2 * n], 0, combinations);
            return combinations;
        }
    
        public void generateAll(char[] current, int pos, List<String> result) {
            if (pos == current.length) {
                if (valid(current)) {
                    result.add(new String(current));
                }
            } else {
                current[pos] = '(';
                generateAll(current, pos + 1, result);
                current[pos] = ')';
                generateAll(current, pos + 1, result);
            }
        }
    
        public boolean valid(char[] current) {
            int balance = 0;
            for (char c: current) {
                if (c == '(') {
                    ++balance;
                } else {
                    --balance;
                }
                if (balance < 0) {
                    return false;
                }
            }
            return balance == 0;
        }
    }

    解法三:

  • 相关阅读:
    ISP基础(17):Gamma
    ISP基础(14):CCM
    ISP基础(15):DRC
    ISP基础(09):DPC
    机器学习基础(二):传统机器学习算法
    ISP算法(08):颜色空间
    如何seo(搜索引擎优化)
    盒模型
    less和sass的定义和区别
    src和href的区别
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/14867480.html
Copyright © 2011-2022 走看看