力扣刷题——22.括号生成
22.括号生成
递归
思路是只要有序列中有n个左括号,任何时候都能最多再添加n个右括号
package leetcode;
import java.util.ArrayList;
import java.util.List;
public class T22 {
public static void main(String[] args) {
List<String> re = new T22().new Solution().generateParenthesis(3);
System.out.println(re);
}
class Solution {
List<String> ans = new ArrayList<String>(100);
StringBuilder tmp = new StringBuilder("");//记录每次得到的括号序列
int aviR = 0;//记录可以添加的右括号的个数
public List<String> generateParenthesis(int n) {
func(n, 0);
return ans;
}
public void func(int n, int index) {
//左括号用完了
if (n == 0 && aviR == 0) {
ans.add(tmp.toString());
return;
}
//添加一个左括号
if (n != 0) {
tmp.append("(");
n--;
aviR++;//可以使用的右括号数+1
func(n, index + 1);
//恢复
n++;
aviR--;
tmp.deleteCharAt(index);
}
//添加一个右括号
if (aviR != 0) {
tmp.append(")");
aviR--;
func(n, index + 1);
//恢复
tmp.deleteCharAt(index);
aviR++;
}
}
}
}
posted on 2023-02-23 16:42 pumpkinsBig 阅读(30) 评论(0) 收藏 举报
浙公网安备 33010602011771号