给定一个入栈序列,找出所有可能的出栈序列。
如入栈序列为 [1, 2, 3]
则可能的出栈序列为 :
[ 3 2 1 ]
[ 2 3 1 ]
[ 2 1 3 ]
[ 1 3 2 ]
[ 1 2 3 ]
采用回溯法和递归统计所有可能的出栈序列。
- 当所有的入栈序列已经全部入栈后,则只能出栈
- 当栈为空时,只能进栈
- 当仍有入栈元素且栈不为空时,可以入栈,也可以出栈
入栈 -> 递归处理下一个入栈元素 -> 恢复未入栈状态
出栈 -> 将出栈元素添加到出栈序列 -> 递归处理当前入栈元素 -> 恢复栈和出栈序列上一个的状态
#include <iostream>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
// input: 输入序列,i 表示输入到第 i 个,N 表示有 N 个输入元素