回溯算法leetcode.22

public List generateParenthesis(int n) {
        Set set=new HashSet<>();//存储答案并去重
        backtrack(set,1,n,new StringBuffer("()"));//回溯算法
        return set.stream().toList();
    }
    public void backtrack(Set set,int m,int n,StringBuffer s){
        if(m>=n)//m为s的层数,n为总层数,因为s初始为一层,所以m初始为1
            set.add(s.toString());
        else
        {
            //每找到一个‘(’,则插入“()”,进入下一层,之后删除插入的括号,继续寻找'('或者达到s末尾
            for (int i = 0; i < s.length(); i++) {
                if(s.charAt(i)=='('||i==s.length()-1)
                {
                    s.insert(i+1,"()");
                    backtrack(set,m+1,n,s);
                    s.delete(i+1,i+3);
                }
            }
        }
    }

你可能感兴趣的:(算法总结,算法,java,leetcode,剪枝,数据结构)