#22 Generate Parentheses

Description

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

Examples

input: 3
output: [ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]

解题思路

想着就是把所有的可能性都求出来,然后用21问的方法去判断是否合理。
“ 求出所有可能性 ” 这一步想了很久,最后用了上一问最后说要考虑的递归hhhhh
每次递归的参数有:左括号还剩多少个,右括号还剩多少个,当前字符串是什么,存放所有可能答案的List
递归终止条件就是左括号没了,或者右括号比左括号少了(如果少了那就意味着有个右括号在没有左括号搭伴的情况下出现了!那肯定不合理)
代码如下:

class Solution {
    public Boolean Judge(String s){
        Stack<Character> st = new Stack<>();
        int i;
        for(i = 0; i < s.length(); i++){
            if(s.charAt(i) == '(')
                st.push(s.charAt(i));
            else{
                if(st.empty())
                    return false;
                st.pop();
            }
        }
        if(st.empty())
            return true;
        return false;
    }
    public void generateAll(int left_remain, int right_remain, String s, List<String>answer){
        int i;
        if(left_remain == 0){
            for(i = 0; i < right_remain; i++)
                s += ")";
            answer.add(s);
            return;
        }
        if(right_remain < left_remain){
            return;
        }
        s += "(";
        generateAll(left_remain - 1, right_remain, s, answer);
        s = s.substring(0, s.length() - 1) + ')';
        generateAll(left_remain, right_remain - 1, s, answer);
    }
    public List<String> generateParenthesis(int n) {
        int i;
        List<String> answer = new ArrayList<>();
        List<String> all = new ArrayList<>();
        String temp = "";
        generateAll(n, n, temp, all);
        for(i = 0; i < all.size(); i++)
            if(Judge(all.get(i)))
                answer.add(all.get(i));
        return answer;
    }
}

其他

  • 这次一如既往去看了solution,意外的发现和solution差不多欸嘿有点小开心
  • 和solution的时间有差距,应该是 String 和 char [ ] 对取值时间不同的锅
  • 不过solution的代码好短QuQ
  • 继续!

猜你喜欢

转载自blog.csdn.net/YY_Tina/article/details/86709965