标题
解题思路
1.用回溯的方法,对下一个情况进行判断,根据传入的是左括号还是右括号来处理
2.count指已输入的左括号,count1指还未删除的左括号,这两个都是用int来存的,因为int是值传递,在函数中进行修改不会影响值本身,而如果将count改为stack类型的数,就会改变本身的值,这样就会很麻烦。
代码
下面展示一些 内联代码片
。
// A code block
var foo = 'bar';
// An highlighted block
var foo = 'bar';
class Solution {
//用栈来实现
//有n个括号
//1.先向栈中传入一个( 这样就
// 然后进行递归,有左边和右边两种可能
// 递归终止条件,有括号且栈为空,左括号且n==0
Listans=new ArrayList<>();
public List<String> generateParenthesis(int n) {
String s=new String();
int count1=0;
s=s+"(";
count1++;
answer(s+"(",1,n,'(',count1);
answer(s+")",1,n,')',count1);
return ans;
}
public void answer (String s,int count,int n,char c,int count1) //count指已输入的左括号,count1指还未删除的左括号
{
if(c=='('&&count==n) {
return;
}
if(c==')'&&count1==0)
return;
if(count==n&&count1==0)
{
ans.add(s);
return;
}
if(c=='(')
{
count1++;
count++;
answer(s+"(",count,n,'(',count1); //stack是全局变量,递归结束后得将这个变量返回为初始状态
answer(s+")",count,n,')',count1);
return;
}
if(c==')') //当传入的是右括号时
{
count1--;
if(count==n&&count1==0) {
ans.add(s);
return;
}
answer(s+"(",count,n,'(',count1);
answer(s+")",count,n,')',count1);
}
}
}