package main.java.demo22;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
*/
public class GenerateParenthesis {
List<String> result = new ArrayList<>();
/**
* 解题思路: 第一感觉是使用回溯法和剪枝函数来解决, 先写着试试看
*
* @param n
* @return
*/
public List<String> generateParenthesis_1(int n) {
backTracking(new StringBuilder(), 2 * n, 0, 0);
return result;
}
private void backTracking(StringBuilder sb, int n, int left, int right) {
if (n == 0) {
if (left == right) {
result.add(sb.toString());
}
} else {
if (left - right < n) {
backTracking(new StringBuilder(sb).append('('), n - 1, left + 1, right);
}
if (right < left) {
backTracking(new StringBuilder(sb).append(')'), n - 1, left, right + 1);
}
}
}
@Test
public void generateParenthesisTest() {
System.out.println(generateParenthesis_1(1));
}
}
生成给定值的所有有效括号
最新推荐文章于 2021-11-19 15:19:20 发布