大家好,又见面了,我是你们的朋友全栈君。
把左右括号剩余的次数记录下来,传入回溯函数。
判断是否得到结果的条件就是剩余括号数是否都为零。
注意判断左括号是否剩余时,加上left>0的判断条件!否则会memory limited error!
判断右括号时要加上i==1的条件,否则会出现重复的答案。
同样要注意在回溯回来后ans.pop_back()
class Solution { public: void backTrack(string ans, int left, int right, vector<string>& res) { if(left==0 && right==0) { res.push_back(ans); } else { for(int i=0;i<2;i++) { if(i==0 && left>0) { ans.push_back('('); backTrack(ans,left-1,right,res); ans.pop_back(); } else { if(i == 1 && right>left && right>0) { ans.push_back(')'); backTrack(ans,left,right-1,res); ans.pop_back(); } } } } } vector<string> generateParenthesis(int n) { vector<string> res; string ans; backTrack(ans,n,n,res); return res; } };
转载于:https://www.cnblogs.com/tornado549/p/9990169.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107192.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...