标签:数字 lis 情况 generate 拼接 设计 组合 并且 int
/**
*
* 数字 n 代表生成括号的对数,请你设计一个函数,
* 用于能够生成所有可能的并且 有效的 括号组合。
*
*/
public List<String> generateParenthesis(int n) {
String cur = "";
List<String> list = new ArrayList<>();
dfs(cur, n, n, list);
return list;
}
/**
* 深度优先
*
* @param cur 当前递归得到的结果
* @param left 左括号还有几个
* @param right 右括号还有几个
* @param res 结果
*/
public void dfs(String cur, int left, int right, List<String> res) {
//如果递归到左右括号都使用完并且满足条件则添加到结果集
if (left == 0 && right == 0) {
res.add(cur);
return;
}
//剪枝,因为有效的括号总是先左侧再右侧,因此剩余的括号中左侧总是小于等于右侧,
// 一旦出现右侧括号小于左侧括号数的情况,说明这种情况无效
if (left > right) {
return;
}
//先递归左括号
if (left > 0) {
dfs(cur + "(", left - 1, right, res);
}
//再递归右括号
if (right > 0) {
dfs(cur + ")", left, right - 1, res);
}
}
标签:数字 lis 情况 generate 拼接 设计 组合 并且 int
原文地址:https://www.cnblogs.com/mx-info/p/14925355.html