• 0022. Generate Parentheses (M)


    Generate Parentheses (M)

    题目

    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:

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

    题意

    指定整数n,要求输出n个括号对的所有合理组合排序(即所有左括号都有对应的右括号)。

    思路

    排列组合问题很容易想到回溯法:每次递归时,记录待插入的右括号的个数count,以及已经插入的左括号的个数n。当n为0时,说明已经插入所有左括号,只要按count补齐右括号即可添加到答案列表中。分两种情况递归:一是只添加左括号,二是当右括号剩余数有盈余时只添加右括号。


    代码实现

    Java

    class Solution {
        public List<String> generateParenthesis(int n) {
            List<String> ans = new ArrayList<>();
            generate("", 0, n, ans);
            return ans;
        }
    
        // count记录待添加的右括号数,n记录已插入的左括号数
        private void generate(String s, int count, int n, List<String> ans) {
            if (n == 0) {
                for (int i = 0; i < count; i++) {
                    s += ")";
                }
                ans.add(s);
                return;
            }
            // 只添加左括号进行递归
            generate(s + "(", count + 1, n - 1, ans);
            // 有多余右括号待添加时,只添加右括号进行递归
            if (count > 0) {
                generate(s + ")", count - 1, n, ans);
            }
        }
    }
    

    JavaScript

    /**
     * @param {number} n
     * @return {string[]}
     */
    var generateParenthesis = function (n) {
      let list = []
      dfs('', list, n, 0)
      return list
    }
    
    let dfs = function (s, list, left, right) {
      if (left === 0) {
        while (right !== 0) {
          s += ')'
          right--
        }
        list.push(s)
      }
    
      dfs(s + '(', list, left--, right)
      if (right > 0) {
        dfs(s + ')', list, left, right--)
      }
    }
    
  • 相关阅读:
    Gridview全选
    Gridview中绑定DropDownList
    图片流Base64编码 转图片
    jQuery 效果
    纯虚函数与抽象类
    c++的内存分配
    sizeof数据对齐问题
    C++中类所占的存储空间
    成员函数实现在类定义中与在类定义外的区别
    C++成员函数的存储方式
  • 原文地址:https://www.cnblogs.com/mapoos/p/13174978.html
Copyright © 2020-2023  润新知