“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
一、题目描述
- 数字
n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
二、思路分析
- 这道题也是一道
回溯的经典问题- 常见的解题思路是先画出来,找规律()()、(())、())(、))((
- 从上面可以看出,只有当左边的括号的数量大于等于右边括号的数量才满足条件
- 右边括号的数量大于左边括号的数量,就不是有效的条件了,终止当前递归
- 左边的括号数量等于右边的括号数量且等于n的情况说明满足条件,加入结果集
三、AC 代码:
class Solution {
public List<String> generateParenthesis(int n) {
//创建返回结果集
List<String>result = new ArrayList<>();
//回溯
backtracting(n,result,0,0,"");
return result;
}
private void backtracting(int n,List<String>result,int left,int right,String str){
//右边大于左边跳过当前循环进行下一次
if(right>left){
return;
}
//左边的数量等于右边的数量并且等于n的情况,加入结果集
if(left == n&&right == n){
result.add(str);
return;
}
//哪边少就继续递归添加
if(left<n){
backtracting(n,result,left+1,right,str+"(");
}
if(right<n){
backtracting(n,result,left,right+1,str+")");
}
}
}
四、总结:
- 好了,代码撸完,我们
总结一下:-
首先是想到回溯,不满足结果就回到上一步,选择新的结果
-
画图找规律,列出符合条件的情况
-