leetcode 22 - 括号生成

题目描述:
     给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合
     例如,给出 n = 3,生成结果为:
     [
     "((()))",
     "(()())",
     "(())()",
     "()(())",
     "()()()"
     ]
*  解题思路:
*  递归生成字符串  递归方法 function(int i , int j  , String s , List<String> list)
*  参数  i : 左括号剩余数量     j   :右括号剩余熟练
*        s :  当前生成的字符串   list: 返回的结果集
*   当 i==j ==0 的时候表示 字符串生成完成  将字符串放入list中
*   当 i==j      的时候    只能在s上拼加‘(’
*   当 i<j &&i>0的时候     s上拼加‘(’ 或者‘)’
*   当 i<j &&i==0的时候   只能在s上拼加‘)’
  public  List<String> generateParenthesis(int n) {
        List<String> res = new ArrayList<>();
        res = function(n,n,"",res);
        return res;
    }

    public static List<String> function(int i , int j  , String s , List<String> list){
        if (i==j&&i==0){
            list.add(s);
        }else if (i==j){
            function(i-1,j,s+"(",list);
        } else if (i<j&&i>0){
            function(i-1,j,s+"(",list);
            function(i,j-1,s+")",list);
        }  else if (i<j){
            function(i,j-1,s+")",list);
        }
        return list;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值