了解生成括号的函数
我有这个算法来生成格式良好的括号的所有组合。
有人可以解释算法的核心概念吗?我试图通过它进行调试,但我似乎仍然无法掌握算法背后的基本概念。
此外,关于如何为这个问题提出这样的算法的任何一般建议,即一个人如何变得如此聪明地以这种方式解决它,或者必须做些什么练习才能达到这个阶段。
问题:
给定一对括号,编写一个函数来生成格式正确的括号的所有组合。例如,给定 ,一个解集是:
n
n = 3
“((()))”, “(()())”, “(())()”, “()(())”, “()()()”
法典:
public ArrayList<String> generateParenthesis(int n) {
ArrayList<String> solutions = new ArrayList<String>();
recursion(n, new String(), solutions);
return solutions;
}
private void recursion(int n, String str, ArrayList<String> sol) {
if(str.length() == 2 * n)
sol.add(str);
else {
int left = 0;
int right = 0;
for(int i = 0; i < str.length(); ++i) {
if(str.charAt(i) == '(')
left++;
if(str.charAt(i) == ')')
right++;
}
if(left == right)
recursion(n, str + "(", sol);
else if(right < left) {
if(left < n)
recursion(n, str + "(", sol);
recursion(n, str + ")", sol);
}
}
}