欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

22. 括号生成

程序员文章站 2022-07-14 14:35:04
...

22. 括号生成

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

思路:
1.暴力法:排列组合将所有的情况列出,判断出有效的括号组合
2.回溯法:添加右括号要满足两个条件
插入数量不超过n
可以插入 )右括号 的前提是 (左括号 的数量大于 )右括号

class Solution {
    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;
    }
}
相关标签: LeetCode Hot100