Leetcode 22. 括号生成

118 阅读2分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

一、题目描述

  • 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

二、思路分析

  • 这道题也是一道回溯的经典问题
    • 常见的解题思路是先画出来,找规律()()、(())、())(、))((
    • 从上面可以看出,只有当左边的括号的数量大于等于右边括号的数量才满足条件
    • 右边括号的数量大于左边括号的数量,就不是有效的条件了,终止当前递归
    • 左边的括号数量等于右边的括号数量且等于n的情况说明满足条件,加入结果集

三、AC 代码:

class Solution {
    public List<String> generateParenthesis(int n) {
        //创建返回结果集
        List<String>result = new ArrayList<>();
        //回溯
        backtracting(n,result,0,0,"");
        return result;
    }

    private void backtracting(int n,List<String>result,int left,int right,String str){
        //右边大于左边跳过当前循环进行下一次
        if(right>left){
            return;
        }
        //左边的数量等于右边的数量并且等于n的情况,加入结果集
        if(left == n&&right == n){
            result.add(str);
            return;
        }
        //哪边少就继续递归添加
        if(left<n){
            backtracting(n,result,left+1,right,str+"(");
        }
        if(right<n){
            backtracting(n,result,left,right+1,str+")");
        }
    }


}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 首先是想到回溯,不满足结果就回到上一步,选择新的结果

    • 画图找规律,列出符合条件的情况

最后这个算法是Leetcode的第22题,是热题100的第13题,去年我刷了热题100用时一个月左右,接下来我会继续更新,小伙伴可以点赞关注,如果你也在刷热题100的话,希望可以对你有一些启发!