【LeetCode 22】 括号生成 (中等) dfs

题目:

【LeetCode 22】 括号生成 (中等) dfs_第1张图片


代码:

先有左括号,才能有右括号,不断回溯即可

class Solution {
     
public:
    vector<string> ans;
    void dfs(string t,int k,int p,int n) 
    //t为目前括号字符串,k左括号数,p目前所有括号数,n为总括号数
    {
     
        if(p==n)  //目前括号数 = 总括号数,一种方案
        {
     
            ans.push_back(t);
            return;
        }
        if(k<n/2) dfs(t+'(',k+1,p+1,n); //左括号不够总数一半,可以加左括号
        if(p-k<k) dfs(t+')',k,p+1,n); //左括号数更多,才可以加右括号
    }
    vector<string> generateParenthesis(int n) {
     
        dfs("(",1,1,n*2);  
        return ans;
    }
};

在这里插入图片描述

你可能感兴趣的:(LeetCode,dfs,字符串,leetcode,算法)