要用回溯演算法,一刷2021/3/19,沒有完全弄明白
最開始看到題目要求刪除最小括號數目,我想的是dp,但是最後它要你返回的又是字串的組合,所以就要回溯。
整體思路比較簡單:
統計出來多餘的左右括號
進行回溯
回溯中如果遇到多餘的括號還沒有全消除掉,那麼就選擇回溯消除
如果對應的多餘括號已經消除完了,那麼就新增到path
進行回溯
class
solution
else
if(c ==
')')
else}}
// 回溯
backtracking
(ss,
newstringbuilder()
,0,0
,0,open
, close)
;return
newarraylist
(set);}
public
void
backtracking
(char
ss,
stringbuilder sb,
int index,
intopen
,int close,
int openrem,
int closerem)
return;}
// 去掉當前位置的字元(括號),並處理下乙個字元
if(ss[index]
=='('
&& openrem >
0|| ss[index]
==')'
&& closerem >0)
if(ss[index]
==')')}
// 不去掉當前位置字元
// 將當前位置字元插入sb
sb.(ss[index]);
// 當前位置不為括號,則直接處理下乙個字元
if(ss[index]
!='('
&& ss[index]
!=')'
)// 當前位置為左括號,增加左括號計數,處理下乙個字元
else
if(ss[index]
=='('
)// 當前位置為右括號,且當前左括號計數大於右括號計數,則增加右括號計數,處理下乙個字元
elseif(
open
> close)
// 撤銷選擇
sb.deletecharat
(sb.
length()
-1);
}}
301 刪除無效的括號 Leecode刷題
刷了乙個困難題,一如既往做不出來,然後看題解,然後再自己打一遍 記錄這個題的原因是,這其實是一類題目!先看看題目再分析。題目描述 刪除最小數量的無效括號,使得輸入的字串有效,返回所有可能的結果。說明 輸入可能包含了除 和 以外的字元。示例 1 輸入 輸出 示例 2 輸入 a 輸出 a a 示例 3 ...
301 刪除無效的括號(BFS)
刪除最小數量的無效括號,使得輸入的字串有效,返回所有可能的結果。說明 輸入可能包含了除 和 以外的字元。示例 1 輸入 輸出 示例 2 輸入 a 輸出 a a 示例 3 輸入 輸出 思路 廣度優先 bfs 廣度優先 bfs public listremoveinvalidparentheses st...
leetcode301 刪除無效的括號
刪除最小數量的無效括號,使得輸入的字串有效,返回所有可能的結果。說明 輸入可能包含了除 和 以外的字元。示例 1 輸入 輸出 示例 2 輸入 a 輸出 a a 示例 3 輸入 輸出 class solution object def isvalid self,s count 0 for c in s...