importjava.util.*;publicclassMain{privateList<String> result =newArrayList<>();privateStringBuilder current =newStringBuilder();privatevoidbacktrack(int left,int right){if(left ==0&& right ==0){
result.add(current.toString());return;}if(left > right)return;if(left >0){
current.append('(');backtrack(left -1, right);
current.setLength(current.length()-1);}if(right >0){
current.append(')');backtrack(left, right -1);
current.setLength(current.length()-1);}}publicList<String>generateParenthesis(int n){backtrack(n, n);Collections.sort(result);return result;}publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);int n = sc.nextInt();Main solution =newMain();List<String> ans = solution.generateParenthesis(n);// 按要求格式输出for(int i =0; i < ans.size(); i++){System.out.print(ans.get(i));if(i < ans.size()-1)System.out.print(",");}System.out.println();}}
defgenerate_parenthesis(n):
result =[]defbacktrack(left, right, current):if left ==0and right ==0:
result.append(current)returnif left > right:returnif left >0:
backtrack(left -1, right, current +'(')if right >0:
backtrack(left, right -1, current +')')
backtrack(n, n,'')returnsorted(result)
n =int(input())
ans = generate_parenthesis(n)print(','.join(ans))
算法及复杂度
算法:回溯法
时间复杂度:
O
(
4
n
n
)
\mathcal{O}(\frac{4^n}{\sqrt{n}})
O(n4n) - 第
n
n
n 个卡特兰数的渐近复杂度