【算法三十五】22. 括号生成

22. 括号生成

回溯:

java 复制代码
class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> ans = new ArrayList<>();
        backtrack(ans,new StringBuffer(),0,0,n);
        return ans;
    }

    private void backtrack(List<String> ans,StringBuffer combine,int open,int close,int max){
        if(combine.length() == max*2){
            ans.add(combine.toString());
            return;
        }

        if(open < max){
            combine.append('(');
            backtrack(ans,combine,open+1,close,max);
            combine.deleteCharAt(combine.length()-1);
        }

        if(close < open){
            combine.append(')');
            backtrack(ans,combine,open,close+1,max);
            combine.deleteCharAt(combine.length()-1);
        }
    }
}

时间复杂度:

空间复杂度:O(N)

思路:其实回溯的题目思路就是一样,找终止条件,做什么,返回什么,删除;关键是每一层需要做什么,这一题两个if就很巧妙,利用open左括号和n进行比较,添加左括号然后回溯,同时第二个if支持你去添加右括号,然后回溯,最后拿到答案

相关推荐
旖-旎2 小时前
分治(快速选择算法)(3)
c++·算法·leetcode·排序算法·快速选择
_日拱一卒3 小时前
LeetCode:合并区间
算法·leetcode·职场和发展
汀、人工智能3 小时前
[特殊字符] 第3课:最长连续序列
数据结构·算法·数据库架构·图论·bfs·最长连续序列
少许极端3 小时前
算法奇妙屋(四十一)-贪心算法学习之路 8
学习·算法·贪心算法
Kethy__3 小时前
计算机中级-数据库系统工程师-数据结构-图
数据结构·算法·软考··数据库系统工程师·计算机中级
亿秒签到3 小时前
L2-007 家庭房产
数据结构·c++·算法
paeamecium4 小时前
【PAT甲级真题】- Longest Symmetric String (25)
数据结构·c++·算法·pat考试
汀、人工智能5 小时前
[特殊字符] 第6课:四数相加II
数据结构·算法·数据库架构·图论·bfs·四数相加ii
A.A呐5 小时前
【C++第二十二章】哈希与散列
c++·算法·哈希算法
汀、人工智能5 小时前
10 - 元组tuple:不可变序列
数据结构·算法·数据库架构·图论·不可变序列