您的位置:首页 > 职场人生

LeetCode解题报告--Generate Parentheses

2015-09-25 13:56 555 查看
**题目:**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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息