Leetcode22. 括号生成(简单回溯)
Posted !0 !
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode22. 括号生成(简单回溯)相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/generate-parentheses/
解题思路
我们每次看可以记录左括号和右括号的个数,如果左括号用完就开始把右括号加入答案中。
代码
class Solution {
List<String> ans = new ArrayList<>();
public List<String> generateParenthesis(int n) {
dfs("", n, n);
return ans;
}
void dfs(String t, int l, int r) {
if(l == 0 && r == 0) { //括号都用完了
ans.add(t);
return;
}
if(l > r) return; //左括号剩余数量不可能大于右括号剩余数量,不合法。
if(l > 0) //如果左括号没有用完
dfs(t + "(", l - 1, r); //递归添加左括号
if(r > 0) //如果右括号没有用完
dfs(t + ")", l, r - 1); //递归添加右括号
}
}
复杂度分析
- 时间复杂度:O( 4 n n \\frac{4^n}{\\sqrt{n}} n4n)
- 空间复杂度:O(n)
以上是关于Leetcode22. 括号生成(简单回溯)的主要内容,如果未能解决你的问题,请参考以下文章