post 递归函数中递增 vs +1

post increment vs +1 in recursive function

我正在研究 Leetcode #22 Generate Parentheses. 在他们的一个解决方案中,我注意到如果我们将 open+1close+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);
        }
    }
}

使用++openopen+1传值的区别在于,前者改变了变量open的值,而后者则没有。也就是说,

  • 如果open是,比如说2,在++open之后,open的值就是3
  • 然而,当你做open+1时,你只传递了3,但open的值仍然是2。所以,下一个循环得到相同的值。

为了更好理解,以下等同于++open

backtrack(ans, cur, (open = open+1), close, max);

在上面的代码中,在将 open 的值传递给方法之前,计算括号表达式以将 open+1 的值设置为 open+1