22 括號生成

2021-10-04 21:13:39 字數 965 閱讀 4374

題目:

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

思路:用dfs處理,如下圖(畫的有點醜)

處理的所有情況為:

沒有括號餘量。

左括號有餘:新增左括號。

右括號有餘且已用左括號數 > 右括號個數:新增右括號。

**:

/**

* note: the returned array must be malloced, assume caller calls free().

*/void

dfs(

char

** ans,

int left,

int right,

int n,

int index,

int* returnsize,

char

* str)

if(left < n)

//左括號沒用完

if(right < n && left > right)

return;}

char**

generateparenthesis

(int n,

int* returnsize)

注意點:

str記憶體的申請用calloc,因為會將每一位初始化為』\0』,如果用malloc則沒有初始化,在strcpy操作時會溢位(當然也可memset初始化什麼的)。

str[index] = 『(』 操作時不可用index++,記憶體會溢位,因為執行到加右括號時,新增的位置錯誤(是原來的後一位),當index > n時會溢位。

22 括號生成

參考回溯法 1.class solution def init self self.ans list defgenerateparenthesis self,n int self.parenthesisiter n,0,return self.ans list defparenthesisiter ...

22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 在leetcode中有關括號的題共有三道,除了這一道的另外兩道是valid parentheses 驗證括號和longest valid parentheses 最長有效括號,這...

22 括號生成

插空法對於乙個 可以把另乙個 插到它的任意乙個空位,形成新的組合。此處有3個空位,但插在頭部和尾部是重複的,所以要注意去重,可以用set class solution object def generateparenthesis self,n res set for i in range n 1 t...