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)++;
    }
  • 相关阅读:
    Hibernate学习(2)- hibernate.cfg.xml详解
    Hibernate学习(1)- 初识
    linux(centos6) 常用操作
    linux(centos6) 下安装 postgresql-9.3.1.tar.gz
    struts2 值栈分析
    struts2 paramsPrepareParamsStack拦截器简化代码(源码分析)
    idea 配置maven
    idea 使用github
    idea 配置svn
    idea 配置tomcat
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/5426273.html
Copyright © 2011-2022 走看看