Leetcode 22. 括号生成 C++

本题是参考别人的思路做的,这两个博客写得很好

https://blog.csdn.net/zjc_game_coder/article/details/78520742

https://blog.csdn.net/w8253497062015/article/details/80001249

题目:

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 = 3,生成结果为:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

本题其实并不好做,所用到的方法很巧妙:回溯法,这是我之前没有学过的。以前听说的执行完当前步骤之后往回走一步,听着很玄乎,这程序怎么再跳回到之前的步骤呢?让人很困惑。做这到题的时候,看到参考博客中画的图和代码,一下子就明白了。

通过递归,基本程序里有多个分支(if 语句),一条路走不通,自然就会回到之前的分支。

感谢博主,具体可以参看:https://blog.csdn.net/zjc_game_coder/article/details/78520742

代码: 

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        fun("",res,n,0,0);
        return res;
    }
    void fun(string cur, vector<string> &res, int n,int left, int right)
    {
        if(right==n)
        {
            res.push_back(cur);
        }
        if(left<n)
        {
            fun(cur+'(', res, n, left+1,right);
        }
        if(left>right)
        {
            fun(cur+')',res,n, left, right+1);
        }
    }
};

猜你喜欢

转载自blog.csdn.net/yuanliang861/article/details/82892899