我正在研究Leetcode #22 Generate Parentheses。在他們的一個解決方案中,我注意到如果我們將open 1and更改close 1為 openand 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);
}
}
}
uj5u.com熱心網友回復:
open和傳值的區別在于open 1,前者open改變了變數的值,后者沒有。那是,
- 如果 open 是 2, after
open, 的值open是3 - 但是,當您這樣做時
open 1,您只會通過,3但 的值open仍然是2。因此,下一個回圈獲得相同的值。
為了更好地理解,以下等效于 open:
backtrack(ans, cur, (open = open 1), close, max);
在上述代碼中,方括號內的運算式求值來設定的值open,以open 1被傳遞給方法之前。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/375098.html
上一篇:滿足遞回Python函式中的驗證,但之后繼續執行else陳述句
下一篇:如何遞回地重復陣列中的元素n次?
