思路:
1.元素入栈
递归
恢复现场
2.出栈
递归
恢复现场
void popSeq(list<int>in,stack<int> st,vector<int> out,vector<vector<int>>& res,int len)
{
if (out.size() == len) {
res.push_back(out);
return;
}
//出栈
if (st.size() > 0) {
out.push_back(st.top());
st.pop();
popSeq(in, st, out, res, len);
st.push(out.back());
out.pop_back();
}
//入栈
if (in.size() > 0) {
st.push(in.front());
in.pop_front();
popSeq(in,st,out,res,len);
in.push_front(st.top());
st.pop();
}
}
int main() {
list<int> in;
in.push_back(1);
in.push_back(2);
in.push_back(3);
in.push_back(4);
stack<int> st;
vector<int> out;
vector<vector<int>> res;
popSeq(in, st, out, res, 4);
for (auto v : res) {
for (auto _v : v) {
cout << _v << " ";
}
cout << endl;
}
}