力扣22. 括号生成(回溯)

左括号在n之前可以随意输出,右括号只有比左括号少才可以输出。
1 class Solution { 2 public: 3 vector<string> res; 4 void backTravel(int n, int left, int right, string s) { 5 if (left > n || right > n) return; 6 if (left == right && left == n) { 7 res.push_back(s); 8 return; 9 } 10 // 照常进行DFS,把所有可选项进行一次选择 11 if (left < n) { //只要左括号未超过n就可以输出左括号 12 s.push_back('('); 13 backTravel(n, left + 1, right, s); 14 s.pop_back(); 15 } 16 if (right < left) { //如果右括号比左括号少就可以输出右括号 17 s.push_back(')'); 18 backTravel(n, left, right + 1, s); 19 s.pop_back(); 20 } 21 } 22 vector<string> generateParenthesis(int n) { 23 backTravel(n, 0, 0, ""); 24 return res; 25 } 26 };
浙公网安备 33010602011771号