LeetCode解题报告--Generate Parentheses

**题目:**Generate Parentheses

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:

“((()))”, “(()())”, “(())()”, “()(())”, “()()()”

分析:题意要求输入正整数n通过算法产生所有可能的左右括号的匹配可能性。
1)涉及n的多可能性的题目,首先得相到的是通过递归解决(recursive),首先找到递归基或跳出递归条件。改题有三种跳出递归条件,1>左右括号数目等于n且相互匹配,该情况也是递归成功返回结果的条件,2>右括号数目大于左括号数目,直接跳出当前递归,3>左括号数目等于n而右括号数目小于n,则直接添加右括号,直到右括号数目等于n。
2)从左右括号数目为0开始递归,直到出现1)中的1>情况,递归结束,得到结果。

Java Accepted 代码

public class Solution {
    public boolean isValid(String s) {
        if (s.length() % 2 != 0) {
            return false;
        }

        Stack<Character> string = new Stack<Character>();
        char ch;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '[' || s.charAt(i) == '(' || s.charAt(i) == '{') {
                string.push(s.charAt(i));
                //System.out.println(string);
            } else {
                if (string.isEmpty()){
                    return false;
                }
                else {
                    ch = s.charAt(i);
                    switch (ch) {
                    case ']':
                        if (string.pop() != '[')
                            return false;
                        break;
                    case ')':
                        if (string.pop() != '(')
                            return false;
                        break;
                    case '}':
                        if (string.pop() != '{')
                            return false;
                        break;
                    }
                }

            }
        }
        if(string.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}

相关代码放在个人github:https://github.com/gannyee/LeetCode/

点赞