这题写错了:
下面是错的
已知出栈序列求所有的入栈序列头条实习一面的算法题,当时没有想出来,事后想起来求出栈序列的所有入栈序列和求进栈序列的所有出栈序列其实答案是一样的,所以只要按照求进栈序列的所有出栈序列来算就行了。
why?
A序列 进栈 -> B序列
那么
B序列 进栈必然可以得到 -> A序列
然后用dfs就可以了,巧妙的很。
public class AllPopSeq {
@Test
public void test() {
//已知进栈序列,求出栈序列||已知出栈序列求所有的入栈序列
//典型的卡特兰数
// C(n) = (2n)!/((n+1)!*n!) n = 4 C(n) = 14
LinkedList<LinkedList<Integer>> linkedLists = allPopSeq(new int[]{
4, 3, 2, 1});
System.out.println(linkedLists.size());
linkedLists.forEach((l) -> {
System