我们先看看题目,会不会一看到题目就能有思路,大佬忽略。
一开始是有思路,但是一敲起来就不对劲了,这是个组合题,要求输出组合变化的结果。
借鉴评论区大佬的思路参考:
采用递归回溯的方法实现:递归很熟悉,回溯的话建议去了解下,很有意思
class Solution {
public List<String> generateParenthesis(int n) {
List<String> res=new ArrayList<>();
generateParenthesi(res,"(",n-1,n);
return res;
}
//递归回溯法
public static void generateParenthesi(List<String> res,String s,int left,int right){
if(left==0&&right==0){
res.add(s);
return ;
}
//当左边还有就需要添加,先添加左边才规范
if(left>0){
generateParenthesi(res,s+"(",left-1,right);
}
//当右的多余左
if(right>left){
generateParenthesi(res,s+")",left,right-1);
}
}
}
思路理解是这样首先先放的必须是“(”左括号,后面再加右括号,思维图就借鉴b站大佬画的,电脑手绘太难了,原谅我拿不出手
这里是不要因为这句话影响到思路:给出 n 代表生成括号的对数这里并没有说是标准括号,只要求你给出正确的括号组合,如果按照标准括号来思考,就很可能限制在一个点上。你需要放开思维。坚持坚持,坚信有付出必有结果!