**题目:**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/