022 Generate Parentheses[M]

1 題目描述

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

難度:Medium

2 題目樣例

For example, given n = 3, a solution set is:[ "((()))", "(()())", "(())()", "()(())", "()()()"]

3 題意分析

給出一個數字n,要求返回含有n對括弧的,所有合法的括弧序列。

(這裡的合法,大家看看樣例就知道是什麼意思了......理解就好。)

4 思路分析

嘻嘻,我覺得這個題目比上一個簡單欸!!

我們可以利用深度優先搜索的思想,用遞歸的方法來解決這個問題。

每次左括弧多於右括弧時,可以加左括弧或者右括弧。

如果左括弧等於右括弧,就只能加左括弧。

左括弧達到數量上限,只能加右括弧。右括弧同理。

代碼實現如下:

class Solution { public: void generate(int left, int right, string str, vector<string>& res) { if(left == 0 && right == 0) { res.push_back(str); return; } if(left > 0) { generate(left - 1, right, str + (, res); } if(right > left) { generate(left, right - 1, str + ), res); } } vector<string> generateParenthesis(int n) { vector<string> res; generate(n, n, "", res); return res; } };

這道題目所有的提交代碼的用時都相當短。我上邊的這段代碼用時3ms,但卻落在了後10%的區間里。我看了看其他區間的代碼,基本上也和上邊的一個樣。至於為什麼時間用的比較短嘛...玄學,玄學。

5 後記

外邊的煙花聲吵得我難以繼續寫下去了...

我永遠愛摸魚.jpg

推薦閱讀:

[leetcode algorithms]題目7
《C++ Primer》讀書筆記-第九章 04 vector對象增長
[leetcode algorithms]題目16
[leetcode algorithms]題目3
[leetcode algorithms]題目13

TAG:演算法 | LeetCode | 演算法設計 |