想着用动态规划的方法,有点类似于n*n的网格,从(0,0)开始走到(n-1,n-1)有几种方法。当然必须满足纵坐标大于等于横坐标,还有必须记录到达每一个点所走的方法(这里指的是有多少不同的字符串)。
class Solution {public: vectorgenerateParenthesis(int n) { vector result; if(n<=0) return result; vector > prev(n+1,vector ()); string s1="("; string s2=")"; for(int i=1;i<=n;i++) { vector > rear(n+1,vector ()); if(prev[0].size()!=0) rear[0].push_back(prev[0][0]+s1); else if(prev[0].size()==0) rear[0].push_back(s1); for(int j=1;j
还有种用递归的简洁方法:
1 class Solution { 2 public: 3 vectorgenerateParenthesis(int n) { 4 vector res; 5 addingpar(res, "", n, 0); 6 return res; 7 } 8 void addingpar(vector &v, string str, int n, int m){ 9 if(n==0 && m==0) {10 v.push_back(str);11 return;12 }13 if(m > 0){ addingpar(v, str+")", n, m-1); }14 if(n > 0){ addingpar(v, str+"(", n-1, m+1); }15 }16 };