• [leetcode]22. 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:

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

    题意:  给定一个长度,生成所有此长度的合法括号序列。

    Solution1:Backtracking.

    We can observe that two constraints:

    (1)  left Parentheses should come faster ahead to reach given n. 

    (2) in each level, we increment left Parentheses count (or right Parentheses count) from given n, and add '(' (or ')') into path

    At last, left and right Parentheses count become 0, we can gerenate a result path. 

    code:

     1 /*
     2 Time:  O(2^n).
     3 Space: O(n).  use O(n) space to store the sequence(path) 
     4 */
     5 class Solution {
     6     public List<String> generateParenthesis(int n) {
     7         List<String> result = new ArrayList<>();
     8         if (n == 0) return result;
     9         helper("", n, n, result);
    10         return result;
    11 
    12     }
    13 
    14     private void helper(String path, int left, int right, List<String> result) {
    15         // corner
    16         if (left > right) return;
    17         // base
    18         if (left == 0 && right == 0) {
    19             result.add(path);
    20             return;
    21         }
    22         if (left > 0) {
    23             helper(path + "(", left - 1, right, result);
    24         }
    25         if (right > 0) {
    26             helper(path + ")", left, right - 1, result);
    27         }
    28     }
    29 }
  • 相关阅读:
    外观模式
    享元模式
    装饰模式
    适配器模式
    组合模式
    典型用户模板与场景
    知识圈APP开发记录(十二)
    知识圈APP开发记录(十一)
    知识圈APP开发记录(十)
    周总结(七)
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/10674633.html
Copyright © 2020-2023  润新知