1 回溯法(Java实现)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Solution {
List<String> res = new ArrayList<>();
char[] parenthesis = new char[]{
'(', ')'};
public List<String> generateParenthesis(int n) {
if(n == 0) return res;
StringBuilder track = new StringBuilder();
backtrack(n,0, 0 ,track);
return res;
}
private void backtrack(int n, int left, int right, StringBuilder track) {
if(left == n && right == n){
res.add(new String(track));
return;
}
if(left < right) return;
if(left > n || right > n) return;
for(char ch : parenthesis){
if(ch == '('){
track.append(ch);
backtrack(n, left + 1, right, track);
track.deleteCharAt(track.length() - 1);
}else if(ch == ')'){
track.append(ch);
backtrack(n, left, right + 1, track);
track.deleteCharAt(track.length() - 1);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Solution s = new Solution();
List<String> res = s.generateParenthesis(n);
System.out.println(res);
}
}
2 回溯法(C++实现)-待更新