wcy19950913 2016-05-14 09:10 采纳率: 0%
浏览 1077

leetcode 22 Generate Parentheses关于C++ string的问题

 /*
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

"((()))", "(()())", "(())()", "()(())", "()()()"
*/

/*
不是很懂p = 2的时候我的结果是["(())","(()()"]。。。
到底哪里出错了。。。
*/
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        //如果当前写的左括号小于n,则可以再写一个左括号
        //如果当前写的右括号小于n且小于已写的左括号个数,则可以再写一个右括号
        vector<string> v;
        if(n == 0) return v;
        writeP("",0,0,n,v);
        return v;
    }
    void writeP(string s,int left,int right,int n,vector<string>& v){
        if(left==n&&right==n){
            v.push_back(s);
            return;
        }
        if(left < n){
           s = s + "(";
           writeP(s,left+1,right,n,v);
        }
        if(right < n && right < left){
           s = s + ")";
           writeP(s,left,right+1,n,v);
        }
    }
};
/*
把更改s的部分放在调用函数里面就AC了。。
*/
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        //如果当前写的左括号小于n,则可以再写一个左括号
        //如果当前写的右括号小于n且小于已写的左括号个数,则可以再写一个右括号
        vector<string> v;
        writeP("",0,0,n,v);
        return v;
    }
    void writeP(string s,int left,int right,int n,vector<string>& v){
        if(left < n){
          // s = s + "(";
           writeP(s+"(",left+1,right,n,v);
        }
        if(right < n && right < left){
          // s = s + ")";
           writeP(s+")",left,right+1,n,v);
        }
        if(left==n&&right==n){
            v.push_back(s);
            return;
        }
    }
};
  • 写回答

1条回答 默认 最新

  • devmiao 2016-05-14 23:59
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。