Leetcode 22 括號生成 字串

2021-09-20 12:54:49 字數 1233 閱讀 5601

給出 n

nn 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。

例如,給出 n=3

n = 3

n=3,生成結果為:

[

"((()))"

,"(()())"

,"(())()"

,"()(())"

,"()()()"

]

思路:

1)全排列。將生成的括號所有可能列出,對每一種可能判斷其合法性。

class solution 

else}}

return st.

empty()

? true : false;

} vector

generateparenthesis

(int n)

for(

int i =

0; i < n;

++i)

do//cout << str << " ";if(

check

(str)

) vec.

push_back

(str);}

while

(next_permutation

(a.begin()

, a.

end())

);//生成全排列函式

return vec;}}

;

2)dfs

dfsdf

s深搜。保證左括號個數與右括號個數匹配,判斷左括號小於n

nn個,則新增左括號;判斷右括號個數小於左括號個數,則新增右括號;當左括號個數大於n

nn或者右括號個數大於n

nn時,返回;當兩個個數為n

nn時,滿足要求,將str

in

gstring

string

存入v ec

to

rvector

vector

class solution 

void

generate

(string ans,

int left,

int right,

int n)

//保證右括號個數匹配左括號個數

if(right < left)}}

;

LeetCode22 括號生成

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

leetcode 22 括號生成

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

leetcode 22 括號生成

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