22. Generate Parentheses

Photo by Calum Lewis on Unsplash
Photo by Calum Lewis on Unsplash
此題要我們列出所有括弧的可能組合,因此我們可以用 backtracking 來解。雖然 backtracking 可以找出所有的組合,但是有些組合是不合法的。

Problem

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

Example 1:

Input: n = 3
Output: ["((()))","(()())","(())()","()(())","()()()"]

Example 2:

Input: n = 1
Output: ["()"]

Constraints:

  • 1 <= n <= 8

Solution

此題要我們列出所有括弧的可能組合,因此我們可以用 backtracking 來解。雖然 backtracking 可以找出所有的組合,但是有些組合是不合法的。以下是一個合法的括弧組合。

讓我們來看一個不合法的括弧組合。一開始先放一個右括弧,這就使得接下來不管怎麼放,都不會得出一個合法的組合。依據這個例子,我們可以觀察出,當右括弧的剩餘數量大於或等於左括弧的剩餘數量時,我們就不可以放右括弧。

Backtracking

  • Time: O(2^2n)
  • Space: O(n)
class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> results = new ArrayList<>();
        dfs(n, n, new StringBuilder(), results);
        return results;
    }

    private void dfs(int left, int right, StringBuilder prefix, List<String> results) {
        if (left == 0 && right == 0) {
            results.add(prefix.toString());
        }

        if (left > 0) {
            prefix.append('(');
            dfs(left - 1, right, prefix, results);
            prefix.deleteCharAt(prefix.length() - 1);
        }

        if (right > left) {
            prefix.append(')');
            dfs(left, right - 1, prefix, results);
            prefix.deleteCharAt(prefix.length() - 1);
        }
    }
}

參考

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You May Also Like
Photo by Oladimeji Odunsi on Unsplash
Read More

72. Edit Distance

在解此題時,我們要先觀察 word1 如何變成 word2。以 Example1 為例,左下圖列出 “horse” 轉變成 “ros” 的 distance。表中,縱軸表示 “horse”,而橫軸表示 “ros”。
Read More
Photo by Diana Parkhouse on Unsplash
Read More

1048. Longest String Chain

此題中,wordA 是 wordB 的 predecessor 指只要插入一個 letter 到 wordA,那就會使得它和 wordB 一樣。然而,插入一個 letter 到一個地方,就要考慮 26 種字母。這使得整體的複雜度上升。
Read More
Photo by Bogdan Farca on Unsplash
Read More

39. Combination Sum

此題要我們列出所有可能的組合,所以我們可能用 backtracking 來找。但是,我們必須避免找到相同的組合。當兩個組合裡的數字和個數都依一樣,但順序不一樣時,他們依然是相同的組合。
Read More