提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
题目列表
【第1题】括号生成
LeetCode地址:https://leetcode.cn/problems/generate-parentheses/
1.题目描述
2.解题思路
我们使用来解决这个问题,该题核心是剪纸操作。
给定一个n,表示分别有n个 “(” 和 “)”,所以一共2n个符号。
在每一个index位置上都可以放一个"(" 或 “)”,摆放逻辑如下:
(1)如果还有"(",摆放,并进入下一层递归进行index+1位置的摆放
(2)如果摆放的 “(” 的个数多于 “)” ,我们才有可能在index位置上放 “)” 并进入下一层递归进行index+1位置的摆放。否则该序列不合法,被丢弃。
(3)当index到末尾时,此时收集的结果一定是合法结果,并将结果加入到结果集。
3.代码详解:
class Solution {
public List<String> generateParenthesis(int n) {
List<String> res = new ArrayList<>();
char[] path = new char[n * 2];
process(res,path,0,n,n);
return res;
}
// 在index位置上做决定
public void process(List<String> res,char[] path,int index,int L,int R){
if(index == path.length){
res.add(String.valueOf(path));
}else{
if(L > 0){
path[index] = '(';
process(res,path,index+1,L-1,R);
}
if( L < R){ // 只有左括号的剩余数量小于右括号时,才是合法的序列
path[index] = ')';
process(res,path,index+1,L,R-1);
}
}
}
}