DFS思路:当前位置可以放两种,一
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
class Solution {
private List<String> res = new LinkedList<>();
public List<String> generateParenthesis(int n) {
if(n < 1) return new ArrayList<>();
// dp思想,就是前一个的 所有组合
// 在每一个组合中
dfs("",n,n);
return res;
}
private void dfs(String s , int l , int r){
if(r<l || l<0 || r<0) return;
// 成功的出口
if(l==0 && r==0){
res.add(s);
return;
}
// 这里不判断。因为在最上面进行了<0判断
dfs(s+"(",l-1,r);
dfs(s+")",l,r-1);
}
}
public class 括号组合 {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.generateParenthesis(3));
}
}
左括号,二右括号。当前已经有的数量,左括号一定要<=右括号的,不然就是不成立的情况。