1 题目:
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
2 思路:
这道题想了好长时间,想不出解法。发现别人用递归解决的。https://leetcode.com/discuss/14436/concise-recursive-c-solution
递归是一种思想啊,一种函数思维?
感觉要完全学会并运用很不容易。
m表示左边的括号,n表示右边的括号。
3 代码:
public List<String> generateParenthesis(int n) { List<String> result = new ArrayList<String>(); helper(result,"", n, 0); return result; } private void helper(List<String> list,String string, int m, int n){ if(m==0 && n==0){ list.add(string); return; } if(m > 0) helper(list,string+"(",m-1,n+1); if(n > 0) helper(list,string+")",m,n-1); }
时间复杂度,我画递归树,发现最大时间复杂度是o(2^n),有不同意见的可以留言一起探讨。