力扣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 };            

 

posted on 2025-03-04 20:58  Coder何  阅读(23)  评论(0)    收藏  举报