摘要:而對于右括號,必須前面放了一個左括號,我們才能放一個右括號。所以我們根據(jù)剩余可放置左括號,和剩余可放置右括號,代入遞歸,就可以求解。
Generate Parentheses 最新更新請見:https://yanjia.me/zh/2019/01/...
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.回溯法 復(fù)雜度For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
時間 O(N) 空間 O(N) 遞歸棧
思路當(dāng)我們放置一個新的符號時,我們有兩個選擇,放置左括號,或者放置右括號,但是按照題意我們最多放置n個左括號,放一個剩余可放置左括號就少一個,但剩余可放置右括號則多了一個。而對于右括號,必須前面放了一個左括號,我們才能放一個右括號。所以我們根據(jù)剩余可放置左括號,和剩余可放置右括號,代入遞歸,就可以求解。
代碼public class Solution { List后續(xù) Follow Upres = new LinkedList (); public List generateParenthesis(int n) { helper(n, 0, ""); return res; } private void helper(int left, int right, String tmp){ // 如果左括號右括號都放完了,則找到一個結(jié)果 if(left == 0 && right == 0){ res.add(tmp); return; } // 對于每個位置,我們有兩種選擇,要么放左括號,要么放右括號 if (left > 0){ helper(left - 1, right + 1, tmp+"("); } if (right > 0){ helper(left, right - 1, tmp+")"); } } }
Q:如果想把生成的括號加上縮進(jìn)來格式化怎么辦?
A:將原先if(left == 00 && right == 0)里面替換為:
int level = 0; for(int i = 0; i < tmp.length(); i++){ if(tmp.charAt(i) == "{"){ for(int k = 0; k < level; k++){ System.out.print(" "); } System.out.println("{"); level++; } else { level--; for(int k = 0; k < level; k++){ System.out.print(" "); } System.out.println("}"); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/64685.html
摘要:復(fù)雜度思路注意的地方,要限制左括號和右括號。每出現(xiàn)一次左括號,就相對于限定了,最多只能出現(xiàn)那么多右括號。所以,為了完成這種限定,用來控制。不然會有的情況出現(xiàn)。 LeetCode[22] Generate Parentheses Given n pairs of parentheses, write a function to generate all combinations of ...
摘要:當(dāng)右括號和左括號的剩余量均為時,及為一個最終結(jié)果。而則會在直接原來的對象上進(jìn)行修改,其指針仍然指向原來的對象。因此在遞歸的過程中使用一定要注意,對對象的修改不要相互干擾。 題目要求 Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses....
摘要:要求返回一個中包含組括號所有可能的符合規(guī)則的組合。例如輸入結(jié)果集應(yīng)當(dāng)是想法輸入的就代表著我們的字符串的組成是個和個。我們需要跟蹤和的使用情況,來判斷下一步的操作是否合法。 題目詳情 Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses....
摘要:構(gòu)造個成對括號給出一個整數(shù),實現(xiàn)一個函數(shù)生成對小括號,對小括號的左右括弧順序不限,但應(yīng)該閉合。思路的情況為時的括號串中在縫隙位置再插入一個括號,如中位置。遞歸解決,時為在和中再插入一個括號。 構(gòu)造n個成對括號 Generate Parentheses 給出一個整數(shù)n,實現(xiàn)一個函數(shù)生成n對小括號,n對小括號的左右括弧順序不限,但應(yīng)該閉合。 Given n pairs of parent...
摘要:一個合法的字符串是指左括號和右括號必定成對出現(xiàn)。要求得出用最少次數(shù)的刪除可以得到的所有的合法字符串。最后兩個結(jié)果重復(fù),因此只保留,兩個結(jié)果。最終生成的合法字符串為。方法相同于上一種情況。其中出現(xiàn)了兩次。在該下標(biāo)前的刪除將會產(chǎn)生重復(fù)的結(jié)果。 題目要求 Remove the minimum number of invalid parentheses in order to make the...
閱讀 1027·2021-09-29 09:35
閱讀 1330·2021-09-28 09:36
閱讀 1616·2021-09-24 10:38
閱讀 1160·2021-09-10 11:18
閱讀 706·2019-08-30 15:54
閱讀 2582·2019-08-30 13:22
閱讀 2032·2019-08-30 11:14
閱讀 780·2019-08-29 12:35