您的位置:首页 > 其它

lintcode -- 生成括号

2017-07-25 11:22 134 查看
给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。您在真实的面试中是否遇到过这个题? Yes样例给定 
n = 3
, 可生成的组合如下:
"((()))", "(()())", "(())()", "()(())", "()()()"
/*采用递归树的思想,当左括号数大于右括号数时可以加左或者右括号,否则只能加左括号,当左括号数达到n时,剩下全部采用递归树的思想left: 左括号的数量right:右括号数量n:括号的对数当left == n:表示左括号已经到达最大值了,只能添加右括号当left >= right: 表示左括号数量 小于 右括号数量,可以添加左括号 也可以添加右括号当left < right or left >n or right >n : 非法操作*/public class Solution {    public ArrayList<String> generateParenthesis(int n){        ArrayList<String> res = new ArrayList<String>();        if(n<=0)return res;        String paren = "";        helper(res,paren,n,n);        return res;    }public void helper(ArrayList<String> res,String paren,int left,i4000nt right){        if(left == 0 && right == 0){            res.add(paren);            return;        }        if(left > 0){            helper(res,paren+"(",left -1,right);        }        if(right > 0 && left < right){            helper(res,paren+")",left,right -1 );        }       }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: