括号生成(给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。)

博客提出一个编程问题,即给定整数n代表生成括号的对数,需编写函数生成所有可能且有效的括号组合,并给出n = 3时的生成结果示例。

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 = 3,生成结果为:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

 

 

public class Test0524 {
    public static void main(String[] args) {
        Solution s = new Solution();
        int n = 6;
        System.out.println(s.generateParenthesis(n));
    }
}

class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> list = new ArrayList<>();
        add(list,"",0,0,n);
        return list;
    }

    public void add(List<String> list,String a,int count1,int count2,int n){
        if(count1 > n || count2>n){
            return ;
        }
        if(count1 == n && count2 ==n){
            list.add(a);
        }
        if(count1 >= count2){
            String s = new String(a);
            add(list,a+"(",count1+1,count2,n);
            add(list,s+")",count1,count2+1,n);
        }

    }
}

 

### C语言实现生成有效括号组合 为了实现在C语言中生成所有可能有效括号组合的功能,可以采用递归的方法。下面是一个完整的解决方案: #### 函数定义与说明 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_COMBINATION_LENGTH 1000 // 假设最大长度为1000 void generateParenthesesHelper(char *str, int pos, int n, int open, int close); void printCombinations(char **combinations, int count); // 主函数用于初始化并调用辅助函数 void generateParentheses(int n) { char str[MAX_COMBINATION_LENGTH]; memset(str, '\0', sizeof(str)); generateParenthesesHelper(str, 0, n, 0, 0); } // 辅助递归函数 void generateParenthesesHelper(char *str, int pos, int n, int open, int close) { static int combinationCount = 0; static char *combinations[MAX_COMBINATION_LENGTH]; if (close == n) { combinations[combinationCount] = strdup(str); // 复制字符串到数组中 combinationCount++; return; } if (open < n) { str[pos] = '('; generateParenthesesHelper(str, pos + 1, n, open + 1, close); } if (close < open) { str[pos] = ')'; generateParenthesesHelper(str, pos + 1, n, open, close + 1); } } ``` 这段代码展示了如何通过递归来构建有效括号序列[^1]。 #### 打印结果 当完成上述过程后,可以通过遍历`combinations`数组打印出所有的组合方式: ```c void printCombinations(char **combinations, int count) { printf("["); for (int i = 0; i < count; ++i) { printf("\"%s\"", combinations[i]); if (i != count - 1) { printf(", "); } } printf("]\n"); // 清理分配的内存 for (int i = 0; i < count; ++i) { free(combinations[i]); } } ``` 此部分负责展示最终的结果列表,并释放动态分配的空间以防止内存泄漏[^2]。 #### 完整示例 将以上两段代码结合起来形成一个完整的程序,在主函数中设置参数`n`即可运行该算法获得期望的结果集。 ```c int main() { int n = 3; generateParentheses(n); printCombinations(combinations, combinationCount); return 0; } ``` 这个例子会输出对于三对括号的所有合法排列情况[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值