zoukankan      html  css  js  c++  java
  • 【Leetcode】【Medium】Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

    For example, given n = 3, a solution set is:

    "((()))", "(()())", "(())()", "()(())", "()()()"

    解题思路:

    典型的回溯法应用,需要写一个回溯的递归方程;

    思想是,对于一个未填充完全的符号串,可以有两种插入方式,分别对应两种递归:

      1、如果左括号 '(' 数量少于n,则string末尾插入 '(';

      2、如果右括号数<左括号数,则string末尾插入 ')';

    解题步骤:

    1、主程序新建一个用于保存各种解的数组,并调用回溯函数;

    2、回溯函数,输入为待填充的解空间lst、某一个解result、当前已填充的左括号数left,当前已填充的右括号数right,题目要求的括号数n

      (1)当result长度为n*2时,即已经完成n个括号的填充,则将result放入lst中,并结束递归;

      (2)否则,如果left<n,插入一个‘(’,继续下一层递归;

      (3)如果right<left,插入一个‘)’,继续下一层递归;

    代码:

     1 class Solution {
     2 public:
     3     vector<string> generateParenthesis(int n) {
     4         vector<string> lst;
     5         Backtracking(lst, "", 0, 0, n);
     6         return lst;
     7     }
     8     
     9     void Backtracking(vector<string> &lst, string result, int left, int right, int n) {
    10         if (result.size() == n * 2) {
    11             lst.push_back(result);
    12             return;
    13         }
    14         
    15         if (left < n) 
    16             Backtracking(lst, result + '(', left+1, right, n);
    17         
    18         if (right < left)
    19             Backtracking(lst, result + ')', left, right+1, n);
    20     }
    21 };

    另:

    //如何使用决策树实现,使叶子成为各种分配方式的集合?

  • 相关阅读:
    全新 D 系列虚拟机型号
    D 系列性能预期
    Azure Backup 入门
    对 Azure Backup 的常见配置问题进行故障排除
    宣布发布长期保留 Azure Backup功能
    宣布 Azure Backup 支持备份 Windows Server 2008
    Azure Backup 简介
    MongoDB中ObjectId的误区,以及引起的一系列问题
    UNIX/Linux_C_程序员需要掌握的七种武器
    Docker企业版安装指南
  • 原文地址:https://www.cnblogs.com/huxiao-tee/p/4308212.html
Copyright © 2011-2022 走看看