【发布时间】:2022-01-11 00:47:57
【问题描述】:
我正在研究Leetcode #22 Generate Parentheses. 在他们的一个解决方案中,我注意到如果我们将open+1 和close+1 更改为++open 和++close,代码将不再工作。我认为我们仍然可以在递归中使用预增量,所以我不明白这里有什么不同。
class Solution {
public List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList();
backtrack(ans, new StringBuilder(), 0, 0, n);
return ans;
}
public void backtrack(List<String> ans, StringBuilder cur, int open, int close, int max){
if (cur.length() == max * 2) {
ans.add(cur.toString());
return;
}
if (open < max) {
cur.append("(");
backtrack(ans, cur, open+1, close, max);
cur.deleteCharAt(cur.length() - 1);
}
if (close < open) {
cur.append(")");
backtrack(ans, cur, open, close+1, max);
cur.deleteCharAt(cur.length() - 1);
}
}
}
【问题讨论】:
-
如果您将
backtrack(ans, cur, open+1, close, max)中的open+1更改为++open,您将更改在if (close < open)条件下测试的值。
标签: java recursion backtracking