您的位置:首页 > 其它

每日一题:LeetCode之括号生成

2020-03-16 07:21 281 查看

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]

思路:
使用深度优先遍历实现,每一个位置要么是

'('
,要么是’
)'
,我们用两个变量
left
right
储存
'('
')'
的剩余个数。每次递归,
left
right
减1,字符串添加一个相应的括号,当
left==0&&right==0
时,即生成了一组有效的括号。
注意:
生成有效的括号前提是left<=right,已使用的
')'
不能少于
'('

public List<String> generateParenthesis(int n) {
List list=new ArrayList<String>();
generate(n,n,"",list);
return list;
}
public void generate(int left,int right,String str,List list){
if(left==0&&right==0){
list.add(str);
return;
}
if(left>right)
return;

if(left>0)
generate(left-1,right,str+'(',list);
if(right>0)
generate(left,right-1,str+')',list);

}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
qq_40053995 发布了13 篇原创文章 · 获赞 0 · 访问量 99 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: