1、DFS

import java.util.*;


public class Solution {
    /**
     * 
     * @param n int整型 
     * @return string字符串ArrayList
     */
    private ArrayList<String> res;
    private int n;
    public ArrayList<String> generateParenthesis (int n) {
        // write code here
        this.n = n;
        this.res = new ArrayList<>();
        dfs("", 0, 0);
        return res;
    }

    private void dfs(String s, int l, int r) {
        if (l > n || r > n || r > l) return;
        if (l == n && r == n) {
            res.add(s);
            return;
        }
        dfs(s + "(", l + 1, r);
        dfs(s + ')', l, r + 1);
    }
}