括号生成~

文章目录


括号生成

1,程序简介

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

示例 1:

  • 输入:n = 3
  • 输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

  • 输入:n = 1
  • 输出:["()"]

提示:

1 <= n <= 8

以下程序实现了这一功能,请你填补空白处内容:

class Solution
{
public:
	void gen(string &p, int lc, int rc, vector<string> &r, int n)
	{
		if (lc > n)
			return;
		if (lc == n && rc == n)
		{
			r.push_back(p);
			return;
		}
		p.push_back('(');
		lc++;
		gen(p, lc, rc, r, n);
		p.pop_back();
		lc--;
		if (lc > rc)
		{
			_________________
		}
	}
	vector<string> generateParenthesis(int n)
	{
		string p;
		int lc = 0, rc = 0;
		vector<string> r;
		gen(p, lc, rc, r, n);
		return r;
	}
};

2,程序代码

# -*- coding: utf-8 -*-
"""
Created on Fri Dec 24 19:07:56 2021
Function:
@author: 小梁aixj
"""
from typing import List
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        def gen(p, lc, rc, r, n):
            if lc > n:
                return
            if lc == n and rc == n:
                r.append(''.join(p))
            p.append('(')
            lc += 1
            gen(p, lc, rc, r, n)
            p.pop()
            lc -= 1
            if lc > rc:
                p.append(')')
                rc += 1
                gen(p, lc, rc, r, n)
                p.pop()
                rc -= 1
        results = []
        gen([], 0, 0, results, n)
        return results
# %%
s = Solution()
print(s.generateParenthesis(n = 3)) #['((()))', '(()())', '(())()', '()(())', '()()()']
print(s.generateParenthesis(n = 1)) #['()']

3,运行结果

括号生成~

上一篇:timegen学习记录


下一篇:题解 P1144 【最短路计数】