class Solution {public: void is_kuohao(vector temp,int n,vector& result)//检测是不是括号,如果是,就打入result { bool is_real=true; int sum_front=0; for(int i=0;i 0) sum_front+=temp[i-1]; if(!(temp[i]<=(i+1-sum_front)))//检测条件1:所有左括号后面接的右括号,其个数不能多于前面所有左括号数目 is_real=false; } if(temp[n-1]<1)//检测条件2:最后一个一定是右括号 is_real=false; if(is_real)//打入result { string new_item; for(int i=0;i & result,vector & temp)//递归生成所有可能的组合 { if(n==0) return; if(n==1)//终止条件 { temp[0]=retain_vlaue; is_kuohao(temp,num_all,result); return; } for(int i=retain_vlaue;i>=0;i--)//递归主体 { temp[n-1]=i; baoli(retain_vlaue-i,num_all,n-1,result,temp); } } vector generateParenthesis(int n) { vector result; vector temp(n,0); baoli(n,n,n,result,temp); return result; } };
分析:
一开始各种想,没想到好多人推荐的居然是暴力法。。。