给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n=3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
我理解的回溯是在进行下一个操作的时候回到当前的状态,这道题的代码一眼看去看不到回溯的步骤。但是仔细一想就能知道,生成左括号的时候传参传的是 str+'(' ,并没有改变str的值。当再去操作右括号的时候相当于还是用str本身的值进行操作。
有一步需要理解的,我已经写到了注释里。
成功
执行用时 : 3 ms, 在Generate Parentheses的Java提交中击败了84.90% 的用户
内存消耗 : 38.3 MB, 在Generate Parentheses的Java提交中击败了56.63% 的用户
class Solution {
public List<String> generateParenthesis(int n) {
List<String> res = new ArrayList<String>();
if(n == 0)
return res;
String str = new String();
helper(res, str, n, n);
return res;
}
private void helper(List<String> list, String str, int l, int r){
if(l==0 && r==0){
list.add(str);
return ;
}
if(l>0)
helper(list, str+'(', l-1, r);
//对于一个有效的结果来说 一定是先出现了左括号 再出现右括号。
//即左括号的数量总是小于右括号的数量,l<r
if(r>l)
helper(list, str+')', l, r-1);
}
}
版权声明:本文为HaleyDong原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。