zoukankan      html  css  js  c++  java
  • 22. Generate Parentheses (backTracking)

    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:

    "((()))", "(()())", "(())()", "()(())", "()()()"

    /**
     * Return an array of size *returnSize.
     * Note: The returned array must be malloced, assume caller calls free().
     */
    char** generateParenthesis(int n, int* returnSize) {
        char** returnArray = NULL;
        if(n==0) return returnArray;
        
        char* elem = malloc(sizeof(char)*(n*2+1));
        returnArray = malloc(sizeof(char*)*2000);
        
        backTracking(n,0,elem, 0, returnArray, returnSize);
        return returnArray;
    }
    
    /*
     *@parameter
     *left(in): number of left parenthesis to add
     *right(in): number of right parenthesis to add
    */
    void backTracking(int left, int right, char* elem, int pElem, char** returnArray, int* returnSize ){
        int i, j, pTmp;
        //逐一填(,然后逐一填),每次都要回溯
        for(i = 1; i < left; i++){ //fill (
            elem[pElem] = '(';
            pElem++;
            pTmp = pElem;
            for(j = 1; j <= i+right; j++){ //fill )
                elem[pTmp] = ')';
                pTmp++;
                backTracking(left-i,i+right-j,elem, pTmp, returnArray, returnSize);
            }
        }
        
        //最后,是只填了(的情况,那么一次性填写所有的)
        elem[pElem] = '(';
        pElem++;
        for(i = 1; i <= right+left; i++){
            elem[pElem] = ')';
            pElem++;
        }
        elem[pElem] = '';
        char* returnElem = malloc(sizeof(char) * (pElem+1));
        memcpy(returnElem, elem, sizeof(char) * (pElem+1));
        returnArray[*returnSize] = returnElem;
        (*returnSize)++;
    }
  • 相关阅读:
    float浮动
    数据库基础操作
    Python re 模块
    I/O模型的使用
    函数形参与实参
    内置函数重写_运算符重载
    导入模块_导入包_标准库模块
    异常处理
    闭包
    函数式编程
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/5426273.html
Copyright © 2011-2022 走看看