生成括號

已知n組括號,開發(fā)一個程序,生成這n組括號所有的合法的組合可能例如:n = 3
結(jié)果為:["((())) "," (()())","()(()) "," ()()()"]
LeetCode 22. Generate Parentheses

n組括號,括號字符串長度為2*n,字符串中的每個字符有兩種選擇可能,“(”或“)”,故有2^2n種可能。


遞歸生成所有可能
#include<stdio.h>
#include<vector>
#include<string>
//當item用來生成的括號字符串,n為數(shù)組,result為最終結(jié)果
void generate(std::string item, int n , std::vector<std::string> &result ){
  if( i == 2*n)){
      result.push_back(item);
      return ;
  }
  generate( item + '(',n, result );
  generate(item+')',n,result);
}
int main(){
 std::vector<std::string> result;
 generate("",2,result);
 for( int i = 0;i< result.size();i++){
    print("%s\n",result[i].c_str());
}
  return 0;
}

在組成的所有可能中,哪些是合法的?
1.左括號與右括號的數(shù)量不可超過n 。
2.每放一個左括號,才可放一個右括號,即右括號 不可先于左括號放置。
故遞歸需要限制條件:
1.左括號與右括號的數(shù)量,最多放置n個。
2.若左括號的數(shù)量<=右括號數(shù)量,不可進行放 置右括號的遞歸。

#include<string>
#include<vector>
class Solution{
public:
    std::vector<std::string> generateParenthesis(int n){
        std::vector<std::string> result;
        generate("",nun,result);
        return result;
private:
// 當前還可以放置左括號的數(shù)量left,右括號數(shù)量right。
    void generate(std::string item , int left, int right, std::vector<std::string> & result){
        if(left == 0 && right == 0){
            result.push_back(item);
            return; 
        }
        if(left > 0 ){
            generate(item+'(',left-1,right,result);
        }
        if(left < right){
            generate(item+')',left,right-1,result);
        }
    }
    }
};
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,578評論 0 13
  • 她一襲白衣, 撐著一把油紙傘, 走在西湖的石橋上。 她看著那遠處的雷鋒塔, 輕輕的嘆了一口氣, 她的身體在塔里, ...
    君兮閱讀 198評論 0 0
  • 如果你沒有前幾年堅持的能力,你就不會有后幾年選擇的權利!
    丁釗閱讀 191評論 1 1
  • - 1 - 十幾年前,有一本很火的育兒書,叫《哈佛女孩劉亦婷》,在這本書里,又提到了另一本幾百年前的育兒書,叫《卡...
    howhowfire閱讀 596評論 0 0

友情鏈接更多精彩內(nèi)容