22. generate parentheses

题目描述

给 n 对小括号,求所有合法的排列组合。

题目分析

递归搜索
无论何时,都能添加左括号;
当剩余左括号小于剩余右括号时,才能添加右括号。

代码

#include <iostream>
#include <vector>

class Solution {
public:
  std::vector<std::string> generateParenthesis(int n) {
    result.clear();
    dfs(0, n, n);
    return result;
  }
  void dfs(int ptr, int l, int r) {
    if (l == 0 && r == 0) {
      str[ptr] = '