給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。
例如,給出 n = 3,生成結果為:
[「((()))」,
「(()())」,
「(())()」,
「()(())」,
「()()()」
]思路:
使用深度優先遍歷實現,每乙個位置要麼是'('
,要麼是』)'
,我們用兩個變數left
和right
儲存'('
和')'
的剩餘個數。每次遞迴,left
或right
減1,字串新增乙個相應的括號,當left==0&&right==0
時,即生成了一組有效的括號。
注意:
生成有效的括號前提是left<=right,已使用的')'
不能少於'('
public list
generateparenthesis
(int n)
public
void
generate
(int left,
int right,string str,list list)
if(left>right)
return;if
(left>0)
generate
(left-
1,right,str+
'(',list);if
(right>0)
generate
(left,right-
1,str+
')',list)
;}
Leetcode 每日一題 22 括號生成
給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 嗯 最開始毫無思路,看到又是個中等題覺得自己應該可以做出來,想了想應該是乙個乙個新增到字串,判斷能不能新增進去,新增左括號無限制,新增右括號時左邊的左括號數必須大於右括號數才能新...
Leetcode每日一題 有效的括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...