public List<String> generateParenthesis(int n) {
Set<String> set=new HashSet<>();//存储答案并去重
backtrack(set,1,n,new StringBuffer("()"));//回溯算法
return set.stream().toList();
}
public void backtrack(Set<String> 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);
}
}
}
}
回溯算法leetcode.22
最新推荐文章于 2024-07-25 11:38:39 发布