LeetCode:括号生成

2020-04-09  本文已影响0人  李海游

22. 括号生成

思路:
最终的字符串肯定是 n个'(', n个 ')' 。
所以'('个数小于n,才可以添加'(';
‘(’个数大于')',才可以添加')'。
‘(’个数等于 n,并且')'个数等于 n,递归终止,且该结果一定是正确结果。
递归过程中不会出现'('或')'个数大于n的情况。

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> v;
        generate("", n, n, v);
        return v;
    }
    void generate(string item, int lef, int rig, vector<string> &v)
    {
        if(lef==0&&rig==0)
        {
            v.push_back(item);
            return;
        }
        if(lef>0) // +(   左括号剩余数-1
            generate(item+'(', lef-1,rig,v);
        if(lef<rig)  // +)  右括号剩余数-1
            generate(item+')', lef,rig-1,v);
    }
};
没思路时不妨理一下可能的状况,哪些状况是合理的,可以用代码约束的。

参考自:https://www.bilibili.com/video/BV19J411E7ft?from=search&seid=7281370434236405070

上一篇下一篇

猜你喜欢

热点阅读