LeetCode 22 括號生成

2021-10-13 09:55:36 字數 1108 閱讀 2722

22. 括號生成

數字 n 代表生成括號的對數,請你設計乙個函式,用於能夠生成所有可能的並且 有效的 括號組合。

示例:輸入:n = 3

輸出:[

「((()))」,

「(()())」,

「(())()」,

「()(())」,

「()()()」

]解題思路:

為了生成所有序列,我們可以使用遞迴。長度為 n 的序列就是在長度為 n-1 的序列前加乙個 『(』 或 『)』。

為了檢查序列是否有效,我們遍歷這個序列,並使用乙個變數 balance 表示左括號的數量減去右括號的數量。如果在遍歷過程中 balance 的值小於零,或者結束時 balance 的值不為零,那麼該序列就是無效的,否則它是有效的。

class

solution

else

if(balance <0)

}return balance ==0;

}// 用於生成括號**

// 引數說明:current 表明當前的括號的字串

// n 表明當前的括號組成的字串的最大的長度

// result 用於存放各類括號字串的結果

void

generate_all

(string& current,

int n, vector

& result)

return;}

// 下面的幾行**不用解釋了,基本操作

current +

='('

;generate_all

(current, n, result)

; current.

pop_back()

; current +

=')'

;generate_all

(current, n, result)

; current.

pop_back()

;}public

: vector

generateparenthesis

(int n)

};

LeetCode22 括號生成

題幹 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 演算法思想 先看括號匹配,既然要達到括號匹配,就一定要滿足stack的操作 不多說 則組合數的結果則是卡特蘭數。要輸出正確組合數,可採用遞迴,用兩個變數l,r分別表示剩餘左...

leetcode 22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 要把這個當成下棋,左括號為黑,右括號為白,則轉換為 3黑3白有幾種排列方式 每一步都有兩個選擇 下黑或者下白,但是場上下白子時剩下的黑子必須比剩下的白子多 比n 2時,有黑白黑白...

leetcode 22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 參考官方題解 方法二 回溯法 只有在序列仍然保持有效才會新增 如果還有位置,我們可以開始放乙個左括號。如果不超過右括號數量不超過左括號的數量可以放乙個右括號。class solu...