Leetcode 22. 括号生成 回溯 C++实现
Leetcode 22.括号生成
问题:数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。
算法:
创建返回数组 ans ,和临时变量 path 。
当左括号数量 open 小于应填括号数 n 时,可以填左括号;当右括号数量 i-open 小于左括号数量 open 时,可以填右括号。递归。
代码:
class Solution {
public:vector<string> generateParenthesis(int n) {vector<string> ans;int m = n*2;// 左括号和右括号一共个数string path(m,0);// 所有括号长度都是一样的 m// 目前已经填了的括号数 i// 左括号个数 open,右括号个数 i-openauto dfs = [&](auto &&dfs,int i,int open){if(i == m){ans.emplace_back(path);return ;}// 可以填左括号if(open < n){path[i] = '(';dfs(dfs,i + 1,open + 1);}// 可以填右括号if(i - open < open){path[i] = ')';dfs(dfs,i + 1,open);}};dfs(dfs,0,0);// 入口return ans;}
};